1 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:21:25 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。 (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。) 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。 関連スレや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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
411 名前:408 mailto:sage [2009/12/24(木) 19:16:52 ] >>409 長くなり過ぎた場合という表現にちょっと語弊があったかも知れません。 実際にはメソッドのブロック付き呼び出しが2〜3続くような場合で どうしても1行には収まらない場合、です。例をあげると files = Dir.glob("**/*.rb").select {|file| ... }.reject {|file| ... }.map {|file| ... } のようなパターンです。
412 名前:402 mailto:sage [2009/12/24(木) 19:18:31 ] >>407 ΩΩΩな、なんだってー。恐れ入りました。そんな手がw gem dependencyやgem specコマンドは--remoteのときには最新版からしかとれないんですね。 一旦gemをインスコしたらOK見られるようですが・・・
413 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:19:43 ] >>408 >>411 files = Dir.glob("**/*.rb").select {|file| ... }. reject {|file| ... }.map {|file| ... } って俺はやってるな
414 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:20:46 ] >>410 > メソッドチェーンでは改行は入れない >>411 であげたようなパターンでもそうなのですか? 自分はああいうパターンだとピリオドの後で改行しちゃうのですが、 一般的には推奨されない(マナーの悪い)書き方なのでしょうか
415 名前:408 mailto:sage [2009/12/24(木) 19:24:34 ] >>413 ピリオドの後は \ なくてもいいんですよね。 自分の場合意図的な改行であることを明示するために \ を付けてます。 というか、>>411 の例は最後の map が意味的におかしいですね、しまったorz
416 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:29:58 ] files = Dir.glob("**/*.rb").select{|file| ... }.reject{|file| ... }.map{|file| ... }
417 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 21:32:51 ] ワンライナー書いてるならともかく、どっかで区切れよと なぜそんなにつなぎまくるのかと
418 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 22:41:13 ] >>417 自分の場合はつなぐというより、 つながっていくという感じでついつい長くなってしまうw 返値を無駄にしたくないというか 変数の名前を processed_values とかにした場合も名前に引きずられて 途中の状態を入れたくないという雑念が生じ、無理してでも一連のチェーンで書いちゃう
419 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:09:13 ] Ping打ちたいんだけどどう書くの?
420 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:25:21 ] >>419 ttp://www.sakalab.net/prog-ruby/ruby-man-html-20080121/ping.html
421 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:35:21 ] 俺もそれ出そうかと思ったけど、ICMP使わないんだよな
422 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:38:51 ] わかりやすくていいじゃん
423 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 05:59:43 ] files = Dir.glob("**/*.rb") files.reject! {|file| ... } files.map! {|file| ... }
424 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:08:05 ] >>423 みたいに例示依存の回答する人なんなの
425 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:21:57 ] 実際には存在しないメソッドを使って質問したほうがいいな
426 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:54:59 ] 別にいいんじゃない? 破壊的メソッドが使える状況なのに気づかなかった初心者がいてもおかしくないし 役に立たないならスルーすればいい 回答者にエスパーを要求するっていうのはそういうことだと思う
427 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:03:27 ] 1.9 だと メソッドのピリオド前でも改行できるようになった 複数行のメソッドチェーンのピリオド位置をそろえられるらしい if とか class とか直後に識別子や式が必須のところは改行しても行が継続するとか そういう行継続のルールってマニュアルあるの?
428 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:16:41 ] 従来のルール 「改行までの箇所を読んで完結していると見なされる(パースできる)ことがないなら改行OK」 に追加されたのは「メソッド呼び出しのピリオドの前もOK」だけのはず。
429 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:18:40 ] あれ、>>428 のルールだけでは class Hoge で改行が許されるのは説明できないのか。
430 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 15:44:18 ] >>429 ん? 説明できてるように思うけど class Hoge って end で閉じるまで完結しないでしょ
431 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:16:30 ] 1.8.7p174 puts 1+ 2 これは3と出る。+がまだ完結していないから2までがまとまって解釈される。 puts(1+ +2) 同じく3。 puts 1 +2 これは1までで完結しているから1と出て、+2は単項演算して捨てられる。 puts(1 +2) これは unexpected tINTEGER, expecting ')' 次の行まで見て完結させてくれないのはどうして?
432 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:22:47 ] パーサをそんなにいじめるなよ
433 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:57:33 ] >>431 パーサには puts (1 2) と見えてる(+ は単項演算子と解釈されてる) puts (1 + 2) だといけるかなと思ったが syntax error, unexpected '+', expecting ')' だった ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
434 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:49:28 ] > puts 1 > +2 > これは1までで完結しているから1と出て、+2は単項演算して捨てられる。 ↑ここまできたら > puts(1 > +2) これは駄目ってわかりそうなもんだろw
435 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:00:39 ] >>434 kwsk
436 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:05:56 ] puts(1\ +2)
437 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:08:58 ] >>434 どうして? >>436 解決法を求めてるわけじゃないぜ。
438 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:30:44 ] ()の構文は(式)。 (1 と書くと1は完結した式と解釈され、次の行には残りの)しか書けない ってことでok?
439 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:42:13 ] ずいぶんしみったれてるな。 '('が出て来たら')'の直前までを式と解釈してくれても良さそうなもんだが
440 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:15:20 ] Rubyのパーサは(人間にすると)曖昧な解釈だからなw >>437 puts 1 +2 が駄目なので、演算子を行末におかない場合は次行と連結されないため、式として認識しない、までは認識できるだろう。 なので、次の puts (1 の時点で次行とは連結されないでその行までで解釈される、と考えられるので、 閉じ括弧がその行にないのでエラーとなる、と そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、 もしくは俺が長い行を複数行に分割するのに慣れすぎているのでそう感じてしまうだけかw
441 名前:デフォルトの名無しさん [2009/12/25(金) 21:24:09 ] puts((3 + 4)) # => 4 とかRubyって面白いね
442 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:29:45 ] もろくも崩れ去った俺(=>>438 )の推理orz >>441 はどういうことなの?
443 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:42:32 ] えっ? ここ初心者スレなんですけど
444 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:05:02 ] >>443 初心者にも有益な話題じゃない? 式が完結してしまうところで不用意に改行して構文エラーも出なくて なんでうまく動かないんだみたいな落とし穴を回避するにはこういう知識も必要
445 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:06:30 ] バッドノウハウに近いと思う 改行が有効な個々の場合を記憶する理由はない
446 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:08:31 ] 初心者は構文解析何それおいしいのだし 妙なところで改行打つような真似もしないだろう
447 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:12:13 ] 結論 とても長い式文でもない限り途中で改行すると見づらいし誤作動の原因になりかねないからやめれ。
448 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:14:12 ] メソッドチェーンはとても長い式文に入りますか?
449 名前:デフォルトの名無しさん [2009/12/25(金) 23:54:41 ] >>441 は puts((3;+4)) と同じ
450 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:29:37 ] >>444 >>443 は>>440 に対して 初心者スレで何で >そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、 なこと言うのってことだ
451 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:34:38 ] puts (3;+4) はエラーで puts((3;+4))は通るのは何で?
452 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 02:20:30 ] 前者、おそらく”(”がメソッド引数の括弧だと読まれている 引数部に”;”があるのはおかしいからエラー 後者、(3;+4)は4に等しいから、 puts(4)と同じ。もちろん文法的に正しい
453 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 02:43:20 ] なぜこんな仕様にしたし
454 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 04:56:34 ] 括弧の省略を可能にするため、とマジレス
455 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:52:07 ] >>451 引数を括る括弧と、式としての括弧は別
456 名前:デフォルトの名無しさん [2009/12/26(土) 21:00:18 ] 質問です。 include して使われることが想定されているモジュールを書いているのですが 非公開の下請けメソッドの扱いについて悩んでいます。 include先で名前の衝突が起こらないようにするため、以下の方法を考えたのですが…… 1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw 2、モジュールメソッドにしちゃう → 非公開じゃなくなるw 3、モジュール内部に Privateモジュールを作り、Private.method でアクセス → Privateモジュール自体は非公開にできないけど、includeする側からアクセス されることはまずないだろう 他にもっとよい方法というか、こういう場合のイディオム、定石のようなものが あったら教えて欲しいです。
457 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:19:29 ] >>456 実用上は >1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw で十分。それでも心配なら接尾辞もつけるといい。 (もちろん衝突しやすい接頭辞は避けてね)
458 名前:456 mailto:sage [2009/12/27(日) 08:57:11 ] >>457 わかりました。接頭辞をつけておくことにします。 あまり長すぎるとうるさくなるんで、 アンダースコア+モジュール名を3文字くらいに圧縮したもの ぐらいでいいかな。
459 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 09:43:27 ] インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど 個人的には3かな、Hoge::Utilsとか
460 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 11:37:54 ] >>456 >1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw スクリプト言語は変数の型についてはいいかげんだし、カプセル化についてだけ厳密性を求めてもしょうがないと思う。 もともとそういう言語じゃないんだよ、スクリプト言語は。 接頭辞や接尾辞をつけるだけでは衝突する可能性はゼロにできないけど、実用上は問題ないから、それでよしとしてください。
461 名前:456 mailto:sage [2009/12/27(日) 17:37:52 ] >>459 > インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど > 個人的には3かな、Hoge::Utilsとか Helpers とかもそうですね。 外部から利用しても役に立ちそうなメソッドなら積極的にそうすべきかも >>460 > カプセル化についてだけ厳密性を求めてもしょうがないと思う。 > もともとそういう言語じゃないんだよ、スクリプト言語は。 そういうもんですか。 サブクラスに対して閉じるアクセス制御って今後もできないんですかね
462 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 01:40:43 ] >>461 たぶんRubyでのprivateを勘違いしている。 Javaと違うから、マニュアルを読むことをお勧めする。
463 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:42:17 ] 可視性メモ ttp://www.rubyist.net/~matz/20070208.html#p04
464 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 06:26:05 ] >>462 名前の衝突を懸念している時点で勘違いはしてないと思うのだが
465 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:17:10 ] >>464 「サブクラスに対して閉じるアクセス制御」と言ってる時点で勘違いしてると思う。
466 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:41:29 ] あればいいのにって話だろ
467 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 12:45:35 ] Rubyではアクセス制御はそもそもできない 可視性を決めるだけ
468 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:09:11 ] >>466 不要です。 以上。 ↓はい次の方。
469 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:12:49 ] ↓ 本質的にはオープンクラスを諦めないといけない ↓ 再オープンできる時点で制御も何もねえよ ↓
470 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:21:24 ] 本質的にはMatzの設計次第
471 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:04:43 ] サブクラスに上書きされない為にどうしたらいいかって質問なのに 勘違いしてるとか不要とか諦めろとかどーゆー事よ 質問者の方がよっぽどrubyの事を理解してると思うわ
472 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:07:14 ] Matzに聞いたら、 サブクラスで気をつけれ っていうに決まってそう
473 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:15:49 ] >>471 だからシステム的にできねえって 新しいRuby実装を自分で作れば無論可能だが、そういう回答を求めているわけではあるまい
474 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:18:15 ] >>471 じゃあ、おまいが答えれ
475 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:57:46 ] set_position x, y, z get_positionX みたいなget,set関数を作りました。 setはともかくgetはつけずに positionX の方が良いですか。どちらがよりRubyっぽいか教えてください
476 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:00:26 ] x メソッドや y= メソッドだと都合が悪い?
477 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:06:09 ] ziki.position = [x,y,z] puts ziki.position_x ですか??? そっちの方がRubyっぽいならそれでも良いです
478 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:20:17 ] 混乱してきたので質問を変えます。 AとBについてどちらが良いですか? A: (1) my.position = [1,2,3] (2) my.set_position 1, 2, 3 B: (1) puts my.position // 配列 (2) puts my.position_x
479 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:39:37 ] >>478 [x, y, z] の組が頻出なら Struct を使ってもいいかも Point = Struct.new(:x, :y, :z) my.position = Point.new(x, y, z) my.position.x
480 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:48:58 ] >>478 attr_accessor, attr_writer, attr_reader とかは知ってる?
481 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:07:20 ] >>479 のPointを使って class My attr_reader :position def initialize ; @position = Point.new ; end def position=(xyz) @position.x,@position.y,@position.z = xyz # 要引数チェック end end my = My.new my.position = [0,0,0] pos = my.position my.position.x = pos.x + 1
482 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:09:56 ] 初心者スレでStruct使うアホは即爆発していいよ
483 名前:478 mailto:sage [2009/12/28(月) 22:11:56 ] そんな難しい文法使わないでください。 初心者には理解できません。
484 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:15:23 ] >>482 お前は永遠に配列の添字アクセスでもやってろ
485 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:23:19 ] ハッシュで複雑なデータ構造を表現するのは悪らしい。。
486 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:27:43 ] >>483 >>481 を見て具体的に何が理解できないか書いた方がよいと思われ
487 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 08:24:31 ] >>485 Javaの人は引数にハッシュを使うことを理解できません Struct使う人間の95%がRubyをJavaと勘違いして使っています
488 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 08:53:28 ] 質問です [1,2,3] * [2,2,2] = [2,4,6] と書ける裏技無いですか。 ようは2つの配列を要素毎掛け合わせて欲しい
489 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:02:39 ] >>488 とくにないです require 'enumerator' a1 = [1, 2, 3] a2 = [10, 20, 30] p a1.enum_with_index.map{|e,i| e*a2[i]} #=> [10, 40, 90]
490 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:04:25 ] >>488 class Array def * other m = [] each_index{|i| m << self[i] * other[i]} m end end 裏技だからね。既存の Array#* を使ってるコードがどっかにあって 何が起きても知らないよ。
491 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:36:10 ] >>487 は x, y, z の組をどう扱うの?
492 名前:488 mailto:sage [2009/12/29(火) 09:38:30 ] >>490 いやそれはちょっと…… >>489 うーん、やっぱり無理そうですね。 C++みたいに Array& operator* (const Array& a1, const Array& a2) が定義できると便利なのに
493 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 12:49:27 ] a1 = [1, 2, 3] a2 = [10, 20, 30] p a1.zip(a2).inject([]){|r,(x,y)| r << x*y} とか
494 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 12:53:15 ] >>491 配列とかでいいんじゃねえの 組として外部に持ち出さなければならないなら クラスか何か作って名前付けることをそのときに考える
495 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:42:10 ] eclipseで開発できますか?
496 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:44:38 ] >>495 そらできる。
497 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:45:55 ] def foo= end と同様に def foo<< end を定義するとコンパイルエラーになるのですが、もしかしてこれはダメなんでしょうか。 その場合はどうすれば???
498 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 17:07:16 ] foo= のようなメソッド名は、 obj.foo = ... のような式のために特別に許されている。 (foo に代入するためには、obj.foo ではなく obj そのものを呼び出す必要があるため) obj.foo << のような式は、obj.foo の << の呼び出しと解釈されるので、 そういうようなメソッド名はない。 ていうかどういうことがしたいわけ?
499 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:15:34 ] obj.foo = # 代入 obj.foo << # 追加 がやりたいです。 fooは仮想的な配列でメンバー変数ではありません。
500 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:22:31 ] Ruby ではオブジェクトの外からインスタンス変数を直接参照したりはできません。 obj.foo は obj.foo() というメソッド呼び出し(が返す値の参照)です。 obj.foo() を定義して、それが返すオブジェクトの << メソッドでなんとかするしかないと思います。
501 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:41:19 ] あーなるほどそういうふうに見えるのか
502 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 19:17:45 ] この場合は変数操作でこの場合変数に偽装したメソッド呼び出し みたいな使い分けで引っかかるのは理解する >>495 あまり楽しくない
503 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 19:22:20 ] eclipseで開発したとして、実行はどうするんだろうね Runとかやって、スクリプトが動いても なんかな、って感じになりそう
504 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:54:55 ] >>495 もしかして: Aptana
505 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 11:17:47 ] <<を定義して配列のように見せかけている例としてはRailsの ActiveRecordのhas_many関連がありますな。 .classですらArrayと返ってくる徹底ぶり。
506 名前:デフォルトの名無しさん [2009/12/30(水) 15:20:41 ] def foo= x, y, z end を定義して bar.foo = 1,2,3 と呼び出すと ./main.rb:25:in `foo=': wrong number of arguments (1 for 3) (ArgumentError) というエラーが出るのですが、なぜ引数3つで呼び出しているのに引数の数が間違えている(1?)とか うちのRuby様はふざけた事を言い出すのでしょうか
507 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:09:05 ] bar.foo = a, b, c は bar.foo=([a, b, c]) だからです。 bar.foo=(a, b, c) で呼び出してください。
508 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:12:48 ] syntax error, unexpected ',', expecting ')' bar.foo=(1, 2, 3) 末尾= の場合は引数1つに限定かしらね? bar.foo=[1, 2, 3]は wrong number of arguments (1 for 3) (ArgumentError)
509 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:49:08 ] >507 それウソ たぶん>>508 が言うように末尾=の場合は引数1個限定だと思う けど自信ない
510 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 21:46:36 ] puts RUBY_DESCRIPTION #=> ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mingw32] plus = "a".method(:+) #=> #<Method: String#+> p plus.("b") #=> "ab" この3行目のシンタックスについてparse.y以外でどこかにドキュメントありませんか? Method.instance_methodsにそれらしきメソッドが見当たらないのですが,Methodオブジェクトに特有なものなのでしょうか?
511 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 22:47:00 ] foo.(arg) とすると foo.call(arg) の意味ということになった。 ttp://jp.rubyist.net/?NEWS-1.9.1.ja の「言語の中核部分」→「新しい文法と意味論」 「.()で#callや#[]を使わずにProcなどを呼べる」