
No.1ベストアンサー
- 回答日時:
キーワードは「to_proc」です。
[1,2,3].map(&:succ)
は
[1,2,3].map{|i| i.succ }
と同じです。
「&:」ではなく「& と :succ」ですね。コロンから始まるのは「シンボル」です。
メソッドの引数の頭に「&」が付いていると、Rubyはこれをブロックだと判断します。でも実際はシンボル。
ここで、Rubyが気を利かせて(笑)Symbolクラスのto_procメソッドを呼んでくれます。
これによって
[1,2,3].map(&:succ)
は
[1,2,3].map{|i| i.succ }
と同じであるということになります。
一応、記述の簡略化のテクニックということになりますね。
詳しくは「to_proc」で検索して下記のような記事を見てもらえれば分かるかと思います。
http://d.hatena.ne.jp/keyesberry/20080917/p1
http://rubyist.g.hatena.ne.jp/muscovyduck/200612 …
http://blog.livedoor.jp/sasata299/archives/51541 …
No.2
- 回答日時:
['a', 'b', 'c'].map(&:upcase) みたいなやつね。
1. Enumerable#map はブロックを引数に取ります
http://doc.okkez.net/static/192/method/Enumerabl …
['a', 'b', 'c'].map { ... }
2. メソッドを呼び出しで、ブロック引数の代わりに Proc オブジェクトを渡すことができます
http://doc.okkez.net/static/192/doc/spec=2fcall. …
['a', 'b', 'c'].map(&some_proc)
3. メソッド名のシンボルは & 付きでメソッドに渡された場合、to_proc が自動的に呼ばれます
別にシンボルでなくても、to_proc メソッドを持つ何かであれば何でもいい(Duck Typing)
というわけで、
['a', 'b', 'c'].map(&:upcase) は
['a', 'b', 'c'].map(&:upcase.to_proc) で
['a', 'b', 'c'].map {|c| :upcase.to_proc.call(c) } で、要するに
['a', 'b', 'c'].map { |c| c.upcase }
以前 Rails のライブラリで使われていたのが、Ruby 1.9.x の何処かで本家にマージされたんだと思う。
この回答へのお礼
お礼日時:2011/10/22 15:18
順を追って説明してくれてありがとうございます。
Rails⇒1.9⇒1.8という感じで追加されたってことでしょうか?前のバージョンを新しくすることもあるんですね!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
(再質問)エクセルのマクロボ...
-
VBScriptでExcel(2019)上のデー...
-
Ruby require ライブラリー
-
パソコンのスクリーンセーバー...
-
教えてください
-
pythonエラー
-
<python>ノイズを時間指定して...
-
C++のCreateFile関数で、ASCII...
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access2000にExcel2000のデータ...
-
railsチュートリアル5章の演習
-
Ruby 同じ名前のメソッド
-
timesの使いどころ
-
Rubyのクラス
-
CloseとQuitについて
-
ハッシュ(単語数を数える) た...
-
再帰に関する質問です。
-
rubyでのproc
-
ブロックつきメソッドやyield文...
-
「arg」は何の略?
-
get() と find() の違いについて
-
エラー「メソッドまたはデータ...
-
教えてください。vb5.0
-
エクセルVBA オートフィルタで...
-
実行時エラー450:引数の数が一...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
-
HSTLやSSTL等のI/Oピン
-
What class are you in? には何...
おすすめ情報