2009-11-24 9 views
5

私はちょうどこの答えを読んでConverting upper-case string into title-case using RubyRubyで正確に `&:capitalize`とは何ですか?

正確&:capitalizeは何のコード

"abc".split(/(\W)/).map(&:capitalize).join 

の次の行がありますか?これを私自身にirbに入れる前に、あなたに言っただろう、それは有効なルビ構文ではない。 Array#map normalyはブロックを取るので、何らかの種類のProcオブジェクトでなければなりません。しかし、そうではありません。私がirbだけに入れると、syntax error, unexpected tAMPERになる。

+0

あなたがirbで動作しない理由は、sepp2kのように、Ruby 1.8.7の標準ライブラリに焼き付けられただけなので、以前のバージョンを実行していると思います。 ActiveSupportもそれを投げ込み、ActiveSupportにはRailsが付属しているので、かなり頻繁に見えます。 Railsのスクリプト/コンソールで試してみると、おそらく動作するはずです。 –

+0

Rubyではmap(&:name)の意味は何ですか?(http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby) –

答えて

6

foo(&a_proc_object)a_proc_objectをブロックに変換し、そのブロックでfooを呼び出します。

foo(&not_a_proc_object)to_procnot_a_proc_objectに呼び出し、to_procによって返されたprocオブジェクトをブロックに変換し、そのブロックでfooを呼び出します。

ルビ1.8.7+およびアクティブサポートSymbol#to_procは、procへの引数のシンボルで指定されたメソッドを呼び出すprocを返すように定義されています。

関連する問題