1 名前:1様 [2009/04/02(木) 09:42:23 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2 名前:1様 [2009/04/02(木) 09:43:25 ] 【よくあるしつもん】 Q: いちからRubyを始める初心者向けのRuby入門書は何がありますか? A: プログラム作成自体の初心者なら 「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」 www.amazon.co.jp/dp/4797336617/ 文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目 「初めてのRuby」 www.amazon.co.jp/dp/4873113679/ 以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください 「Rubyレシピブック 第2版 268の技」(初心者向け) www.amazon.co.jp/dp/4797340045/ 「プログラミングRuby 第2版 言語編」(初心者向け) www.amazon.co.jp/dp/4274066428/ 「Ruby Way 第2版」(脱初心者向け) www.amazon.co.jp/dp/4798115339/ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け) www.amazon.co.jp/dp/4873113245 以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません 「プログラミング言語 Ruby」(言語として深く知りたい人向け) www.amazon.co.jp/dp/4873113946/
3 名前:1様 [2009/04/02(木) 09:45:06 ] Ruby 公式・非公式便利サイト2009 Ruby Home Page 【公式、お役立ち度が微妙】 www.ruby-lang.org/ja/ Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】 www.ruby-lang.org/ja/man/ www.ruby-doc.org/ 【詳しい英語版】 HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】 elbereth-hp.hp.infoseek.co.jp/ruby.html Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】 www.ruby-doc.org/docs/ProgrammingRuby/ Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】 jp.rubyist.net/magazine/ 逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】 www.namaraii.com/rubytips/ はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】 d.hatena.ne.jp/keyword/Ruby RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】 www.rubyforge.org/ GitHub 【○○をやりたいコードをとにかく探すならここ、英語】 github.com/ 日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】 jp.rubyist.net/
4 名前:1様 [2009/04/02(木) 09:46:21 ] 関連スレ 本スレ Rubyについて Part 35 pc12.2ch.net/test/read.cgi/tech/1238194350/ アンチスレ Rubyについて(アンチ専用) Part003 pc11.2ch.net/test/read.cgi/tech/1207233348/ Railsスレ 【Ruby】Ruby on Rails Part6 pc11.2ch.net/test/read.cgi/php/1224838013/ Windows用スレ 【ActiveScript】RubyをWindowsで使うスレ【GUI】 pc11.2ch.net/test/read.cgi/tech/1155031689/ Ruby 1.9 系列スレ 魁け! Ruby 1.9.X pc11.2ch.net/test/read.cgi/tech/1201603546/
5 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:07:16 ] 英語板に振ったアホがいるが、これは単なる技術英語なので、文法論は意味がない 命令文でもないのに Abort. と表示されるのはおかしいなんて指摘しても意味があるまい
6 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:16:41 ] >>5 (前スレ質問再掲) > □ 996 デフォルトの名無しさん [] 2009/04/02(木) 12:43:26 > > 英語のエラーメッセージで > 「not found, ignored.」 > のような、かなりシンプルな構文で書かれることがありますが、これを英文法 > 上の用語でなんと言いますか? > > また、これについて勉強できる書籍(など)があれば教えてください。 どう見ても英文法の質問です。本当に(ry 真面目な話、このスレよりはスレ違いじゃなかろうと思ったんだが、まずかったらすまんかった。
7 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:23:18 ] そういやクラスやメソッド名を英語で付けようとして困ったということがよくあるなあ みなさんどうしてますか?
8 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:24:37 ] エスパーするなら 「こういうのどうやって書いたらいいかわからないので調べたいです、必要な用語を教えてください」 だと思うけどね 文法書レベルの用語を知るためだけに質問したとは思えねー どう書くかというのは、もう英語のソースや技術文書読むしかないな なるべく大きなプロジェクトのもの 技術文書に関しては企業プロダクトのものが好ましい 技術英語と略語掲示文を解説した本には実は心当たりがあるんだが、見つかんねえ 無理してでも買っておけばよかった
9 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:28:27 ] ○○体とか言うんじゃなかった? まあ英文法書にはのってねーだろ普通。文系は帰れよ。
10 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:33:15 ] English板に振るほど板違いではないが、Ruby固有の問題でもないので掘り下げるのはスレ違いかなーという感じだな ネイティブを真似っこするしかあんめえ
11 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:46:19 ] >>7 その手のスレはム板に専用のがちゃんとあるよん ソースのコメントを英語で書くスレ pc12.2ch.net/test/read.cgi/tech/1224696505/ クラス名・変数名に迷ったら書き込むスレ。Part14 pc12.2ch.net/test/read.cgi/tech/1230477632/
12 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 13:51:41 ] >>11 の上で似たような話題が出てるね ソースのコメントを英語で書くスレ pc12.2ch.net/test/read.cgi/tech/1224696505/563 > 関数やメソッドの説明って主語の this function とか this method とかが省略されて > 動詞から始まることが多いんだけど、色々調べてみるとその動詞に > ...
13 名前:11 mailto:sage [2009/04/02(木) 14:06:43 ] それ質問してるの俺だからw
14 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:08:45 ] >>11-12 が(実用度的に)ベストアンサーっぽい? 質問の答えとしてまとめてみると、 ・エラーメッセージは文法を崩していることもある ・エラーメッセージとしての慣習や慣用的な言い回しがあり、それらには英文法上の呼び名があるときも無いときもあるだろう ・勉強するならむしろ技術書を当たった方がいい?(エラーメッセージのガイドライン等) ってこと、かな?適当なので訂正よろ。
15 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:32:28 ] >>13 ワロタ このリンクは収穫だったわ java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide
16 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:15:51 ] むしろ松本教祖の英語力に疑問があるけどな。
17 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:46:25 ] あんま関係ないかも知れんが、 俺他人にプログラミングを教えるときは、メソッド名とかを あえて日本語ローマ字で書いてる。 (def shokika とかね。) 初心者のうちは、どれが自分で作ってる部分でどれが言語仕様なのか 区別つかんだろうなーと思って。 (ダサさ満点だけど)
18 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:36:39 ] >>17 それ公開されているプログラムでも見たことがある。 p2とか見てみなよ面白いからw
19 名前:前スレ751 mailto:sage [2009/04/02(木) 19:43:34 ] FasterCSVでExcelで出力したcsvで以下のエラーが出る件ですが、解決いたしました。 " Unquoted fields do not allow \r or \n (line 1)." CSV自身の改行は\r\nで特に問題なく困っていたのですが、 どうやらFasterCSV自身は改行を \n(0A) として扱っているらしく、\r\n(0D 0A) が混じるとエラーが出る場合があるようです。 以下のように改行コードを明示的に指定(:row_sep => "\r\n")してやると無事に読みこむことができました。 FasterCSV.read(filename, :encoding => 'sjis', :row_sep => "\r\n") :row_sepはデフォルトでは :autoになっているみたいですが、場合によってはエラーになるみたいです。 というわけで、皆様ありがとうございました。 # しかし、出力時もFasterCSVで改行コード指定しなかったら \n だけになってて orz
20 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:47:41 ] 引数としてもらったブロックを他のメソッドのブロックとして渡す、ということは可能なのでしょうか? ブロックを持つメソッドのラッパーなどを作った場合に、どうしたものかと。 今は、Procで受け取って、メソッド呼び出し時にわざわざブロックを作ってその中で Proc.callしています。 以下のような感じです。 def open_from_nantoka(filename, &block) open(filename) {|f| block.call(f) } end
21 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:54:05 ] def open_from_nantoka(filename, &block) open(filename, &block) end
22 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:00:10 ] >>20 普通に open(filename, &block) でいけると思うんだけど。 $ irb irb(main):001:0> p = lambda { puts "hoge" } => #<Proc:0x7ff9c264@(irb):1> irb(main):002:0> 3.times(&p) hoge hoge hoge => 3
23 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:45:46 ] >>21-22 ありがとう。& つければよかったのか… マニュアルでは "ブロック付きメソッド呼び出し"のところにありました。
24 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:48:09 ] まー単純なクラスとメソッドの説明に乗らないそのへんはマニュアル一通り読んでもらわないとわからんな
25 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:50:39 ] mapとかで便利以外のSymbol#to_proc の便利どころを探してます。 1.8.7から使える Symbol#to_procって Methodの代わりのようには使えないのでしょうか? irbで以下のようになって、 ?と首を傾げています。 > def a(method) method.call "hoge" end => nil > a(Kernel.method(:puts)) hoge => nil > a(:puts.to_proc) => nil
26 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:23:03 ] class Symbol def to_proc lambda{|receiver, *args| receiver.__send__(self, *args) } end end みたいなもんだから。 レシーバは既に知ってるMethodの代わりにはならないんじゃないかと。
27 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:58:30 ] a(:puts.to_proc) は、self.puts() という意味になっちゃうから、 でもってこれはinclude KernelしているObject#puts()だから、 改行して終了ということだな。
28 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:13:40 ] LAMPという言葉がキモくて仕方がありません。 いったい誰がこのような言葉を広めたのでしょうか。 流行? web2.0と同じくらい下らない。 そもそもこの言葉使いますか? 「おし、じゃあサクっとLAMP環境構築しておいてよ」 「これからはPHPだよな。LAMPさいこー」 なんて言いますか? こんなキモい言葉が港では当然のように使われているのが許せません。 早く死語になりますように ><
29 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:20:23 ] Rubyが先に死なないようにしないとね。
30 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:24:57 ] LAMP には別に正負どっちの感も持たないけど >>28 はうっとおしいと思った。
31 名前:28 mailto:sage [2009/04/03(金) 00:30:31 ] 見ておくれ、このひどい有様を!! ja.wikipedia.org/wiki/LAMP 構成要素に応じてAMP、LAPPのように言葉も変わっている類似用語があげられてる。 これこそまさにキモい! なにコイツらって感じ。 「俺は面白い言葉遊びを考えたんだぜ〜」とか思ってるのか? そして「は?LAMPも知らないの?」と、知っていて当然のように喧嘩売ってくる奴は、きっとこの言葉遊びの工作員だから、いっしょに死んで欲しい。
32 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:32:11 ] 港でlampが使われるのは用途あってのことだろうしどうでもいいだろ
33 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:19:27 ] マカだと、MAMPとか逝ってるしな。リナックスでいいだろと思う。
34 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:27:59 ] うーん、微妙だ ttp://www.google.com/search?hl=ja&safe=off&num=50&q=%22%E6%B8%AF%E3%81%A7%E4%BA%BA%E6%B0%97%E3%81%AE%22&lr=lang_ja
35 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:07:39 ] 結局>>28 自身がキモイだけだったな。
36 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 08:08:04 ] /ニYニヽ (ヽ /( ゚ )( ゚ )ヽ /) (((i ) /::::⌒`´⌒::::\ ( i))) でっていうwwwwwwwwwwwwwww /∠_| ,-)___(-,|_ゝ \ ( ___、 |-┬-| ,__ ) | `ー'´ /´ | /
37 名前:デフォルトの名無しさん [2009/04/03(金) 10:22:11 ] _, ._ ( ・ω・) ○={=}〇, |:::::::::\, ', ´ 、、、、し 、、、(((.@)wwwwwww
38 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 11:55:37 ] class C attr_accessor :hoge end p C.new.instance_variables class C def initialize ; @hoge=nil; end attr_accessor :hoge end p C.new.instance_variables 結果 [] ["@hoge"] …まーそりゃ確かに hoge= が呼ばれない限り @hoge は存在すら感知できませんが、なんかちょっとヤだなあ instance_variables を使ってナニカの存在をチェックするという行為のほうが筋が悪いきちんとデータベース作っとけというのは いやもう全く以ってその通りではございますですが
39 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:20:45 ] 明示的に初期化しましょう、で終了
40 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:22:04 ] 初期化(笑)
41 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:24:11 ] attr_accessorが作るのはメソッドであって変数そのものではないのだが なにか勘違いしてるんじゃないだろうか
42 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:28:39 ] p @hoge と @hoge=nil p @hoge が状態が違うというのはあまり好きではない オブジェクトに関連付けられていないインスタンス変数はローカル変数同様にエラーを返すほうがよかった気がする
43 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:42:50 ] >>26-27 ありがとう。 なるほど、receiverはself固定なのね やっぱ代わりにはならないか Kernel.method(:puts)が書きずらいなーと思ったので、 :Kernel.puts.to_proc ってまあ、無理かw
44 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:45:18 ] >>28 じゃないけど、職場でLAMPって言葉使ったら、m9(^Д^)プギャー!!されてしまった。 そんな言葉、聞いたことないよ、と 用語説明しても、それは単にソフトウェアの構成のことであって、うんぬん
45 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:51:15 ] Wintelみたいなもんだろ?>LAMP 言葉は知ってても使わない、っていう人も多いだろうし、知らない人は知らないし。 言葉だけではとくに m9(^Д^)プギャー!! されるもんでもなかろう 使い方じゃね?
46 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:51:38 ] >>42 いきなり if @name.nil? then @name = '上戸彩' end とかできないのか 全部initializeで初期化するべきだな
47 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:56:07 ] >>46 こういうときって defined? と nil? 両方でみるべきなのかね if defined?(@name) || @name.nil? @name = "mage" end いや、やっぱinitializeでnil初期化がらくだ
48 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:58:14 ] attr_accessor に、全部nilで初期化ってくらいのオプションがついててもいいと思うんだ。 どうせsyntax sugarなんだから。
49 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:59:37 ] >>44 知らない奴が知ってる奴に「m9(^Д^)プギャー!!」するのは何かおかしいだろう。 まあ知ってるからどうだという言葉ではあるが。
50 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:17:46 ] >>46 @name ||= '上戸彩' >>42 は = で代入が行われてないインスタンス変数は instance_variables に登録されないとかなんかその辺の話だろう どちらも nil を返すが後者はインスタンス変数が存在していると
51 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:08:33 ] >>50 なんでだよw @is_man = false @is_man ||= true p @is_man => true 「||=」と「if xxx.nil?」は違う
52 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:13:06 ] >>51 50じゃないけど慣用句的に使ってたよ('A`) nilじゃないときは代入、みたいに
53 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:16:03 ] falseが入ってこないという仕様ならいいと思う ただ完全な置き換えではないということは知っておかないと、 リファクタリングのときとか微妙に挙動を変えることになるかもね。 微妙なのがわかりづらい。あからさまなのはわかりやすい。
54 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:23:51 ] FlaseClass のオブジェクトがどこからともなく入ることはそもそもありえないだろ
55 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:41:12 ] Flase 落ち着け つ旦~
56 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:53:44 ] >>54 みたいに間違いを指摘されると意固地になるやつって面倒なんだよな 指摘しないと仕事にならないときとか困る やんわり言ってもやんわり意固地になるし・・・どーすりゃいいのよ
57 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:35:31 ] >>56 >>46 が @name == false をチェックしてないということ自体が答だろ false はこの場合「入るはずがない」のが前提 nil? メソッドを defined? でチェックしてないのと同じ
58 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:50:59 ] もしfalseが入ってるなら上書きしちゃまずくないか? という流れじゃないのか?おれの勘違いだったらスマン
59 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:01:17 ] false の時は動作しないだろ、という突っ込みが文脈上無意味またはオタ臭い重箱隅つつき、というようなアリガチな話だと思った
60 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:05:14 ] >>46 できる。未定義のインスタンス変数を参照するとnilが返るから。 でもって>>50 が @ivar ||= val という書き方を提案した。 これは @var = val unless @ivar みたいなもんなので >>51 が@varがfalseでも上書きしちゃうぞ、と突っ込んだ
61 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:10:23 ] DBのブール型を普通に使ってるおれは興味深かったが、 true/falseを変数に入れるって使わないやつは使わんのかね。
62 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:14:19 ] >>60 >>42 をよく嫁よ オブジェクトに関連付けられていないインスタンス変数はローカル変数同様にエラーを返すほうがよかった気がする
63 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:47:54 ] >>46 からの流れだよ。 >>42 の意見はどーでもよかったから省いた。 そんな仕様だったら死ぬ。
64 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:56:18 ] >>40 なにが(笑)なのかkwsk
65 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 00:20:16 ] 普段pythonを使ってるのですが rubyとの対応表みたいなのがあるサイトはないでしょうか rubyを手間かけないで覚えたいのです
66 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:08:47 ] >>65 pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%B8%C0%B8%EC%A4%CE%C8%E6%B3%D3
67 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:16:07 ] あ
68 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:44:13 ] Hikiって文書の中にRubyのスクリプト埋め込んだりできないの?
69 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 23:04:56 ] Wikiの文書にサーバーで動作可能なスクリプトを埋め込めるとか怖過ぎるだろ…
70 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 23:06:19 ] Hiki公開しちゃダメ
71 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:39:49 ] asobi.sqweebs.com/cdxidyfk/sphvpisz.php 質問用テンプレ作りました。
72 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:48:03 ] テンプレ作ってくれて助かるが、webサービスにする必要あるのか?ww
73 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:49:12 ] >>71-72 せっかくなのでテンプレコピペ(ちょい修正) ◆質問用テンプレ 【詳しい内容(「動きません」「うまくできません」だけでは回答しにくい)】 【エラーメッセージ(自力で訳さずなるべくそのままで)】 【実行環境(OS名、Rubyのバージョン(ruby -v しる)】 【最終的にやりたいこと(もっとよい方法がある場合が多いため)】
74 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:16:28 ] >>71 乙、しかし Rubyで作れw
75 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:24:31 ] ランダムディレクトリ名でランダムファイルのCGIはアクセス解析とスパイウェア注入と相場が決まってる アクセスしたお前らオタワ\(^o^)/
76 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:38:13 ] Rubyスレに貼られるPHPのCGIなんざ俺が踏むわけねーだろ
77 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:44:32 ] 外部コマンドを一定時間実行して実行を打ち切るのってどうすればいいですか? なんとかBSDでのTS抜き環境が出来てddコマンドでUSBデバイスからコピーすればデータが流れてくるようになりました。 停止しなければ延々放送波が流れてくるので、CTRL+Cで停止する必要があるのですが、 rubyでラッパーを書いて利用する際にどうすれば時間指定を出来るのかと思った次第です。
78 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:50:00 ] Rubyあんま関係ないな システムコールとか勉強するといいぞ 時間指定は cron とかの外部スケジューラに任せるのが一般には間違いない
79 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:00:22 ] さっぱり分からんがスレッド使って時間をみたりするのはダメなのか?
80 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:22:59 ] 子供を1時間動かしておいて、30秒だけしか待ってやらない親 require 'timeout' pid = fork if pid begin timeout(30) do puts "waiting #{pid}" sleep end rescue Timeout::Error Process::kill('KILL', pid) ensure Process.wait end else exec("sh -c 'sleep 3600'") end
81 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:28:09 ] >>79 個々のスクリプトとしては sleep するしかないので、正直あんまりよくはない 自分の見てる前で30分だけ動かすとかそういうのならいいけどさ
82 名前:デフォルトの名無しさん [2009/04/05(日) 21:04:00 ] OpenStructクラスで、[]、[]=、count(from Enumerable)などのメソッドを使いたいのに 定義されていない場合は、OpenStructを継承して派生クラスで定義してくれってことですか?
83 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:47:41 ] >>77 pid=fork if pid==nil then exec('やりたいコマンド') else sleep 動かしたい時間 # まずはSIGINTで止めてみる Process.kill(pid,'INT') stat=Process.waitpid(pid,Process::WNOHANG) if stat==nil then # ダメなのでSIGTERMで Process.kill(pid,'TERM') stat=Process.waitpid(pid,Process::WNOHANG) if stat==nil then # これもダメだったのでSIGKILLで。これなら確実に終了できる Process.kill(pid,'KILL') stat=Process.waitpid(pid) end end end 確かforkは失敗すると例外を投げるはず
84 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:48:40 ] >>82 他にどーしろと… st[0] でも st[:hoge] でも st.hoge でも st.each でもアクセス可能なコレクションというのは デフォルトでは添付されてない どれか諦めてくれ
85 名前:77 mailto:sage [2009/04/05(日) 22:44:07 ] >>80 >>83 有り難うございます 別のプロセスをforkで作り、子供側にはnilを返し親にはpidを返すので 下に分岐を入れて子供には外部コマンド実行、親にはスリープしたのちkillさせる、ってことですね。 確かにrubyはあんまり関係ない処理だなあ・・・。unixの勉強がいるなあ。
86 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:45:57 ] >>83 pid = fork {exec('...')} とブロックのほうがいいんじゃまいか 1.9ならspawnがあるんだが。
87 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:51:45 ] それから、シグナル送ってからちょっとくらい待ってやれよ。 以下、Bourne Shell版。 #!/bin/sh やりたいコマンド & pid=$! sleep 動かしたい時間 kill -INT $pid 2>/dev/null && { sleep 1; kill -TERM $pid 2>/dev/null; } && { sleep 1; kill -KILL $pid 2>/dev/null; } wait
88 名前:デフォルトの名無しさん [2009/04/06(月) 01:21:04 ] クラス名を文字列で受け取ってnewしたいとき、どのようなコードになりますか。 いろいろ試してみたけど最終的にはシンプルにevalしか思い当たらないんですが、漠然と他にありそうなような。 classname = "SomeClass" require classname #ファイル名とクラス名が同じと仮定した場合 obj = eval("#{classname}.new")
89 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 02:36:15 ] >>88 classnameが::を含まない前提? > require classname #ファイル名とクラス名が同じと仮定した場合 普通は require classname.downcase > obj = eval("#{classname}.new") obj = Object.const_get(classname).new のほうが速い active_supportあたりにそんな機能があるよ、確か。
90 名前:88 mailto:sage [2009/04/06(月) 06:20:11 ] >>89 ありがとうございます! >>88 の例では明示的にrequireしていますが、実際にはオートロードするように書いていたため evalしかダメでした。(evalした時点で暗黙に読み込まれる) const_getだと、すでに読み込まれている定数に対してですが、 そのことに気づかずにあれやこれやと・・・orz 現在は修正してうまくいっています。 active_supportは使えない環境なんですが、ファイル名のことなども参考になりましたm(_ _)m
91 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 10:55:14 ] >>90 > >>88 の例では明示的にrequireしていますが、実際にはオートロードするように書いていたため > evalしかダメでした。(evalした時点で暗黙に読み込まれる) > const_getだと、すでに読み込まれている定数に対してですが、 > そのことに気づかずにあれやこれやと・・・orz > 現在は修正してうまくいっています。 バージョンとエラーメッセージは? $ echo 'class C; end' > c.rb $ /usr/bin/ruby -ve 'autoload :C, "c"; p Object.const_get(:C); p $"' ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] C ["c.rb"]
92 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:37:54 ] Rubyプログラミング入門 ?はじめてのプログラミング、はじめてのRuby ttp://www.bnn.co.jp/books/title_index/web/ruby_ruby.html サンプルコードを読む限りはまー最初ならこんなもんじゃねーの、と思った 少なくとも同時期のナントカの冒険よりは読む価値があると思う サンプルコードのダウンロードURLが書いてあったんだけど まさかサイトに書いてない購入者限定の代物だとは思わなかったので記憶してくるの忘れた サンプルコード公開すれば売上伸びる系統の本だと思うのに
93 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:10:52 ] Rubyの冒険とかめちゃくちゃ懐かしいんだが それとは関係ないんだな
94 名前:90 mailto:sage [2009/04/06(月) 20:43:51 ] >>91 いただいたコードを見ると、const_getでautoloadしないわけではなかったのですね。 今一度自分のコードを見直してみたところ、const_getでautoloadできました。(解決!) 最初、Javaのように文字列からクラスを生成する書き方ばかり想像していて >>88 で説明のための適当なコードを載せたばかりに、余計な手間をおかけしました。 いまさらですができているコードを書いておきます。 #testfactory.rb module TestFactory #モジュール内のメソッドは公開済み autoload :TestClass1, "testclass1.rb" autoload :TestClass2, "testclass2.rb" def get_instance(classname, *args) #インスタンスを返す # eval("#{classname}.new(*args)) #>>88 の時点のコード # require classname.downcase #>>90 の時点のコード(レシーバ違いでrequireが必要だった) # Method.const_get(classname).new(*args) #requireしないと=> uninitialized constant Method::TestClass1 self.const_get(classname).new(*args) #現在のコード(問題なし) end #その他の同種のメソッド def get_class(classname); self.const_get(classname); end #クラスを返す def method_missing(classname, *args); self.const_get(classname).new(*args); end #同じくインスタンスを返す end
95 名前:90(続き) mailto:sage [2009/04/06(月) 20:45:03 ] #test.rb require "testfactory" #ファクトリモジュールを読み込み classname = get_classname #あるメソッドによりクラス名(文字列)を決定 obj = TestFactory::get_instance(classname, arg1) #OK! Rubyのバージョンは以下のとおりです ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] ありがとうございました!
96 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:15:58 ] ruby:1.8.7 rails:2.1.0 でやってるんだけどto_dateって使えないの? ググったら1.8.6だとprivateメソッドで定義されて〜 とか書いてたけどto_datetimeやto_timeとかもundefind methodになる…
97 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:19:21 ] >>96 Railsのライブラリで定義されてるメソッドの話はスレ違い 【Ruby】Ruby on Rails Part6 pc11.2ch.net/test/read.cgi/php/1224838013/
98 名前:96 mailto:sage [2009/04/06(月) 21:24:10 ] >>申し訳。 そっちで聞いてみます。
99 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:27:17 ] スレ的にはRailsをRuby初学者が使うのは全くお勧めしない
100 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:46:32 ] 「Rubyレシピブック 第2版 268の技」を買いたいと思ってるんですが レシピブックって言うのはもっといたほうがいいんですかね? 言語挫折厨なもんで、、、便利なら買いたいと思っています。