1 名前:デフォルトの名無しさん [2008/02/22(金) 14:31:31 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
55 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:39:29 ] >>54 自分でそのコード実行してみた?
56 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:42:47 ] irb(main):001:0> nil.each{|e| p e} NoMethodError: undefined method `each' for nil:NilClass from (irb):1 from :0 irb(main):002:0> @hoge.each{|e| p e} NoMethodError: undefined method `each' for nil:NilClass from (irb):2 from :0 irb(main):003:0> @hoge = [] => [] irb(main):004:0> @hoge.each{|e| p e} => []
57 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:51:17 ] >>54 >いきなり >@ary.each{|e| p e} >ってやると@aryなんて知りまへんでって怒られる インスタンス変数でなくローカル変数の場合はその通りなのだが 未初期化のインスタンス変数を参照した場合は nil となるはず >>53 上記のことを踏まえての質問ということでおk? やってもやらなくてもnilが入っているという意味ではその通りかも知れないが クラスで用いるインスタンス変数を明示的に示しておくという意味では無意味ではないと思う
58 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:53:56 ] >>55 インスタンス変数は「定義」しなくてもnilだってのは忘れられがちだよな インスタンス変数の「定義」をinitializeでする意味はRuby的にはあまりないと思う
59 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:59:02 ] 厳密にはメソッドが追加されるからただの定義ではないけど attr_reader とか
60 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:59:28 ] 外部からアクセスされるなら直後のattrに名前が出るし 外部からアクセスされないインスタンス変数って一体 あ、サブクラスからアクセスしたいか
61 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:23:53 ] >>60 外部からアクセスされないインスタンス変数はあっても全然おかしくないと思う むしろすべての実装を外部からアクセスできるように公開する方がまずいのでは
62 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:28:17 ] インスタンス変数は外部からアクセスしたいときにのみおもむろに使え、ということなのでは それ以外ではメソッド引数とかで細々とやれと
63 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:42:22 ] Rubyのスコープはちょっといろんな言語と違うからね a = 100 def foo() return 1 + a end foo() とすると何がかえってくると思う?aが定義してないってエラーになるんだぜ
64 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:43:47 ] こういうときはaを@aに変えるのが定石
65 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:08:26 ] >>63 そもそもの問題として、メソッド定義の中以外にローカル変数なんて置くなよ…
66 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:16:55 ] トップレベルに定義したメソッドなんだろ トップレベルのローカル変数は特別扱いしてくれてもいいような気もするけどな
67 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:06:31 ] でもnilの特別扱いは要らない…
68 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:25:56 ] irb(main):001:0> a=[0,1,2] => [0, 1, 2] irb(main):002:0> [a] => [[0, 1, 2]] irb(main):003:0> [*a] => [0, 1, 2] irb(main):004:0> [3,4,5,*a] => [3, 4, 5, 0, 1, 2] irb(main):005:0> [*a,3,4,5] SyntaxError: compile error (irb):5: syntax error, unexpected ',', expecting ']' [*a,3,4,5] ^ from (irb):5 4行目は良いのに5行目はダメっていう挙動が理解できないんだが・・・
69 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:59:48 ] >>68 *arrの「うしろ」に置けないだけ 先頭に書けないんじゃなくて、展開後にも何かがあると文法エラー irb> a = [1, 2, 3] [1, 2, 3] irb> [9, 8, *a, 7] SyntaxError: compile error
70 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:01:21 ] ていうか、もしかして *array を「arrayの要素をバラす表現」とかいう理解をしてる?
71 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:06:23 ] 1.9なら通るよ
72 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:04:14 ] 自作プログラムをクラスごとにファイルに分けると20ファイルくらいになる 「ああ、実行するたびに20回もHDDにアクセスしてるんだ」と考えると憂鬱になる ということで開発用ディレクトリと実行用ディレクトリを分けた 実行用ディレクトリには開発用ディレクトリにあるスクリプトを連結したものを入れてる これならファイルアクセスの回数は数回で済む いや標準添付のクラスとかrequireしてる時点で何個もファイル読み込みまくってるのはわかってんだけど
73 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:55:41 ] >>72 その最適化で何秒早くなったの?
74 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:57:22 ] 時間が問題だと思ってる?
75 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:03 ] >>74 >>72 はそういうことを言いたいわけではないと思われ
76 名前:75 mailto:sage [2008/02/26(火) 22:17:55 ] >>72 じゃなくて>>73 だorz
77 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:30:19 ] >>72 は一言も最適化とは言ってないな。
78 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:34:14 ] ディスクアクセスが無意味に多いのが心情的に嫌なのだろう そう感じるセンスそのものは悪くはない
79 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:28:06 ] 無意味に多いのかそれは、とか 全部動かさずにユニットテストしろよ、とか
80 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:49:05 ] 要するにプリコンパイルヘッダーが必要ということか?
81 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:45:24 ] C++ とかやると、コンパイル時にいくつヘッダ読んでるかなんて 全く気にならなくなるZE
82 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:05:29 ] コンパイル時(>>72 の例だと開発中)はどうでもいいんだが、実行時に、というのが心情的に気持ち悪いという話だろう。
83 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:26:02 ] なら、コンパイル系の言語を使えばいいんじゃまいか?
84 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:54:36 ] そんな読み込み程度を気にするのがいかにも初心者だな
85 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:55:55 ] Ruby使いはお茶でも飲んでまたーりするがよい わっはっはっは
86 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:06:07 ] >>84 そうか? 「それ自身は事実だから好きにせえ」以外の必死な否定論が出ることのほうがよっぽど初心者だと思うが…
87 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:07:32 ] ところでCが書けないRuby書きはニワカだと思いますがどうですか。
88 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:13:07 ] I/O を工夫することはパフォーマンスチューニングでは基本事項。 もとの環境や条件が不明だけど、CGIのようにリクエストのたびにプロセスを 実行しなきゃいけない場合は、読み込み速度を工夫するのは別におかしな話ではない。 ファイルサイズが小さくても、ファイルの数が多ければハードディスクのシークタイムは バカにならない。 ただ、ファイルを連結しても断片化してたら効果は少ないから、デフラグを ちゃんとやってやる必要があるけど。
89 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:17:28 ] もうそんな時代でもないんだけどな
90 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:24:31 ] >>89 ストレージへのアクセスが問題にならないコンピュータができたならぜひ教えてくれ というか最近の子は「HDDがガリガリ言う」とか気にしないもんかね 静音化されて意識しなくなったんだろうか
91 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:29:29 ] HDDはアクセスすると壊れるからなあ いや、こんなんで壊れる確率がはっきり増えるHDDってのもかなりアレだが… とりあえず 「クラス単位の細切れファイルをインストール時に数個にまとめとく」 というのは別に非難されるようなことじゃないと思うぞ というかそんなにまでして行為そのものを否定する理由を知りたい
92 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:30:48 ] ガリガリ言うほどのアクセスを問題にしてるのか? そもそもそんなこと言ってたらRubyなんて選択肢にならんだろ
93 名前:デフォルトの名無しさん [2008/02/27(水) 12:32:34 ] 鈍足のRubyを使う人は達観した境地にあるので小さいことは気にしない
94 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:57:19 ] 正直、完全に論点がずれてるような気がしてならない。 元発言は、無駄を嫌うというプログラマの美徳を発揮してるだけじゃないの?
95 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:04:35 ] チューンナップを突き詰めるとRuby使うなになるからおすすめしない
96 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:08:02 ] Railsみたいな糞のかたまりで遊ぶのがRubyistだからな
97 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:16:36 ] Railsのナカミを喜んでる人は少数だと思う Railsは開けないほうがよい箱だ あくまで外部から自分のために便利に使うシステム
98 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:42:30 ] これが SyntaxError になるんだけど何故でしょうか? def foo?; end def bar?; end case when not foo? when not bar? end
99 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:52:00 ] >>94 まぁ、美意識の問題だわな。 そしてそれは、そんな変なエネルギーってわけではない。
100 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:15:48 ] >>98 notだから。 case when (not foo?) when (not bar?) end か case when ! foo? when ! bar? end なら期待通りに動く
101 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:16:13 ] >>98 この辺の話かな ttp://www.ruby-lang.org/ja/man/html/trap_A4C7B2F2B7E8A4B9A4EBA4E2A4CE.html when (not foo?) ならおkのはず
102 名前:デフォルトの名無しさん [2008/02/27(水) 18:42:53 ] [標準出力へのフックを仕込む] 標準出力に出力 標準出力に出力 標準出力に出力 [標準出力に書き出した内容をメールで送信] ってやりたいんですが、 どうやったら出来ますか?
103 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:55:07 ] 出力時にスコープの広い変数に文字列を追加保存しとけばいいじゃん?
104 名前:98 mailto:sage [2008/02/27(水) 19:02:54 ] >>100 , >>101 なるほど。 てっきり「not foo?」は「式」かと思っていたんですが、「文」なんですね。 了解しました。深いっす。
105 名前:デフォルトの名無しさん [2008/02/27(水) 19:12:13 ] phpでいうis_array()はどうやればいいですか? rubyは配列もあるしハッシュもあるし、自分でコレクションも作れるしで どう判定していいのか分かりません(?o?)
106 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:17:02 ] [0,1,2].is_a?(Array) #=> true [0,1,2].kind_of?(Array) #=> true ArrayクラスはObjectクラスを継承している。 だからArrayクラスはObjectクラスのクラスメソッドやインスタンスメソッドも使える。 Objectクラスのリファレンスをみるべし。 www.ruby-lang.org/ja/man/html/Object.html
107 名前:デフォルトの名無しさん [2008/02/27(水) 19:30:43 ] >>106 ありがとうございます 試してみたところ、PHPとは異なり、 ハッシュと配列は明確に区別されているようですね ハッシュ.is_a Array → false 配列.is_a Hash → false
108 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:34:50 ] オブジェクト、実際的には変数、が配列かどうかを調べなければならないコードというのはRubyではかなり異常 極力他のアプローチを取るようにしたほうがいい
109 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:40:03 ] case arg when Array when Hash とかよくやるじゃん
110 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:42:06 ] そうですか(><) YAMLで書いた設定ファイルを読んで 該当キーをeachで回すようにしてるんですが、 キーを省略した時にはnilになりますよね。 nilをeachしたらエラーになるので、eachできるかどうかを調べてから eachしたいのですが、 こういう場合はruby的にはどう書くものですか?
111 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:14 ] >>110 ・ 変数がnilかどうかを事前にif文で比較して弾く ・ eachでnilが例外エラーを起こしたらその例外をキャッチする どっちか好きなほう使え
112 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:32 ] def hoge(foo, bar) raise ArgumentError unless foo.is_a?(String) raise ArgumentError unless foo.is_a?(Array) ・ ・ ・ end とかメソッドの最初でモリモリやっちゃうのはだめ?
113 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:58:48 ] >>112 わりと下品。 まあ、それ以上でもそれ以下でもない程度かと。 コレを無くすために悩む時間がえらい長引くってんならあっても仕方ないんじゃね。おいおい考え変えていけばいいかと。 そのクラスやメソッドに本当にそんなクラスのインスタンスが指定されることがあるのか? をよく考えるといい。 標準添付で「結果の数によってStringあるいはArrayが返ります」とかいうメソッドがあるかい? …そういえばなんか添付モジュールで複数のクラスが返ってくる可能性のあるやつあった気がするがまあいいや。 「Stringが来たときはHashに変換しよう」とかいうのも同様。Stringなんか渡してくる奴が悪い、で桶。 raaやgemで公開して育てる気マンマンでちまちまフールプルーフさいこー、という場合はあったほうがいいのかも。
114 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:07:48 ] 日本語がよくわからない
115 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:35:03 ] >>102 require 'stringio' # 標準出力へのフックを仕込む $stdout = StringIO.new # 標準出力に出力 puts '未承諾広告' puts 'こんにちは^^)' # # 標準出力に書き出した内容を $stdout.rewind text = $stdout.read メールで送信(text)
116 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:42:15 ] >>115 ぬう、適切だが邪悪だ…
117 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:45:13 ] >>110 eachに反応するときだけeachしたいなら、 respond_to? :each する。 と思ったことが私にもありました。 なんでStringがeach持ってるんだよ……(1.8での話)
118 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:48:51 ] >>116 標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w 使い方自体は巻き戻せるIOの正しい使い方 $stderrに仕込んでおくとwarnの出力をロギングできるぞ warn使ってる人ってあんまり見ないけどな >>117 eachの中でArrayやHashという構造べったりの処理をするからあまり意味がなかったり…
119 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:52:27 ] STDOUTに元の残ってるし、 writeメソッドがないとTypeErrorだし、 邪悪っていうにはおとなしい希ガス。 バッドノウハウなのは確かだけど。
120 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:24:04 ] >>118 >標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w そんなことないだろ なんで邪悪なのか説明してみな
121 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:08:29 ] Herokuってどうよ
122 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:40:13 ] >>120 出力先が固定になってるあたりかな。
123 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:02:13 ] なんでパイプしてその先でメールするんだと 駄目なんだろ。
124 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:06:51 ] >>122 それだけじゃわかんね。固定してたらなぜだめなの?
125 名前:デフォルトの名無しさん [2008/02/28(木) 13:16:13 ] 標準出力をフックしたい⇒出力先が固定 意味不明だな。
126 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:20:35 ] なんかのはずみで標準出力に出るようなものも全部キャプチャしたいなら すなおに別プロセスで読み出せ
127 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:07:34 ] こんなもんでいいんじゃね class Dummy @@origout = $stdout def initialize @buf = '' end def write(str) @@origout.write(str) @buf << str end def flush tmp = @buf @buf = '' tmp end end $stdout = Dummy.new puts "hello" puts "world" $stderr.puts $stdout.flush.inspect 思い切り誤爆してきた。。。
128 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:43:56 ] >>126 なんで別プロセスにするのがいいの? $stdout = StringIO .new だとなんか問題あるの?
129 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:47:47 ] >>118 バカ >>122 バカ >>126 バカ
130 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:53:15 ] バカとしか言えない>>129 はバカでよい 是正させる気も無いようだしただの害悪だな
131 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:52:29 ] >>128 ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24stdout 大抵はそれで問題ないけど 拡張ライブラリとか子プロセスなんかの出力は $stdoutを書き換えるだけだとリダイレクトできないはず
132 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:41:22 ] Rubyに限ることではありませんが、 httpでpostするデータが大きくてメモリ不足になるとき どうやって回避するのがよいのでしょうか? Net::HTTP.start(host) {|http| r = http.post(path, data, header) } という感じでpostするときdataが大きすぎる場合に備えて 小出しに分けて送ることってできませんか?
133 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:08:26 ] >>131 だったら最初からそう書けよ おまえの書き方だと $stdout を変更するのがすべて悪いみたいじゃないか >>130 バカはおまえだろ
134 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:13:28 ] >>132 サーバ側の話? それともクライアント側の話? サーバ側の話なら、cgi.rbを使わず自前でHTTPを解析する必要がある。 クライアントの話なら、dataをファイルに保存しておいて、例えば10MBずつ読み込んで送信を繰り返せばいいんじゃね?
135 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:13:54 ] 空気悪いな >>131 はこの話題に関しては初めて書きこんだのだが >>132 クライアント側だとすると、body_streamを使うのはどう? ttp://d.hatena.ne.jp/unageanu/20071009 この辺か
136 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:34:05 ] >>133 =129 あきらめろ、幾ら頑張ってもお前の>>129 は「馬鹿じゃない」と解釈する余地が無い。
137 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:19:04 ] www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html 1.9 featureって書いてあるから1.8じゃ使えないのかと思ったら1.8.6でも使えるのね。よかった。
138 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:22:09 ] >>134 クライアントです。 分けるといっても複数のpostを一連の1つのpostと 認識させるにはどうしたらいいんでしょうか… >>135 >>137 チャンク形式っていうんでしょうか? で、body_streamを使えばヘッダとか気にしなくていい ってことでよいでしょうか? >>132 のdataの内容を一旦 data.txt に書き出しておいて、 あとは >>135 の例のchunkedを使うようにするとできたっぽいですが、 一時ファイルを使わないようにできないでしょうか?
139 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:48:00 ] RubyにあるモジュールはCGIやHTTPの知識の必要性を良くも悪くも隠蔽しない その知識のまま進むのは危険だ HTTPやCGIの勉強をすることを勧めるよ
140 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:29:26 ] >>138 >>137 が書いてるページの body_stream 使うんだろうけど、おれもやったことないからわからん。 ぐぐったらこんなのあった d.hatena.ne.jp/unageanu/20071009
141 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:11:22 ] curlコマンド使うのが一番楽やねん
142 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:17:48 ] 「年・月・日」ではなく「年・月」の2つしかないデータがあるんだけど、 これを格納するデータオブジェクトって何がいいかな? いや、年月日が揃ってるデータと「年・月」が同じかどうかという比較をするんよ 年月日ならDateオブジェクトなんだけど、日をどうしようかなあと
143 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:30:19 ] >>142 ・ 「どうせ参照されないからいいじゃん?」とか年金式にdayを1に固定してDateを使う ・ [year, month] という配列に入れておく ・ Dateを継承した「dayが無指定でも動く」という新しいDateを作る
144 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:05:14 ] ・Date に適当にメソッドを足して適当に YYYY/MM/01 でも代表元に使う
145 名前:デフォルトの名無しさん [2008/02/29(金) 21:09:37 ] require 'yaml' yaml_str = <<YAML_STR hoge: - moge: [poge, page] YAML_STR data = YAML.load(yaml_str) data['hoge'].each {|key,value| p key,value} こうすると、 keyが{"moge"=>["poge", "page"]} valueがnilになってしまいます。 key=moge,value=[poge, page] になって欲しいのですが…。 どこが間違っているのでしょうか?
146 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:47:44 ] data["hoge"] #=> [ {"moge"=>["poge", "page"]} ] つまり "moge"=>["poge", "page"] という(キーが一つの)ハッシュを一つ持つ配列 mogeをリストにせずにインデントで階層にすれば data["hoge"] #=> {"moge"=>["poge", "page"]} になる
147 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:09:30 ] >>145 data['hoge'].each {|hash| hash.each {|key,val| p key, val}}
148 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:17:20 ] >>146-147 ありがとうございました YAMLのマッピングの記述を勘違いしていたようです
149 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:09:51 ] なんか最近思うんだけどさ ここ「初心者」スレだよな・・・ 素直に本家行けば?って人ばっかりじゃね?
150 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:39:41 ] 本スレはMatzと愉快な仲間たちについて あれこれ語るスレであって、プログラムを語るスレではないのです …あれ? じゃあ板違いじゃない?
151 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:36:51 ] 「Rubyの初心者」のスレでしょ? プログラミング自体の初心者じゃないといけないの?
152 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:44:14 ] >>149 が考えるところの「本スレ」のレベルに依存するな
153 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:15:48 ] >>149 同意。
154 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:39:06 ] あんなS/Nの小さいスレ 使ってられねーよ
155 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:00:41 ] irb> s = '2'; case s; when /(1)/,/(2)/,/(3)/ then p $1 end "2" irb> s = '2'; case s; when Regexp.union(/(1)/,/(2)/,/(3)/) then p $1 end nil なんで?