1

以下との混同Array#each

%w{ david black }.each {|str| str.capitalize }
#=> ["david", "black"]

上記のコードはクールですが、以下のロジックがどのように機能するのか理解できませんでした。

%w{ david black }.each(&:capitalize)
#=> ["david", "black"]
4

4 に答える 4

3

と呼ばれる非常に古いトリックSymbol#to_procです。

ここで詳細を読むことができます: http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html

基本的には、引数を取らないメソッドを呼び出すためのショートカットです。などでよく使われmapます。

%w[i can measure length of strings].map(&:length) # => [1, 3, 7, 6, 2, 7]
于 2013-03-25T17:38:55.767 に答える
0

の表記法&:somethingは、配列のすべての要素に対してメソッドを実行しsomethingます。

これは通常、配列のすべてのエントリを変更したり、ハッシュからデータを抽出したりするために map と共に使用されます。

[{:foo => :bar, :meh => :bar2}, {:foo => :one, :meh => :two}].map(&:foo)
=> [:bar, :one]
于 2013-03-25T17:38:15.380 に答える
0

地図の使い方は?

[1173]pry(main)> ["david","black"].map{|str| str.capitalize }
=> ["David","Black"]
[1173]pry(main)>
于 2013-03-25T17:34:51.723 に答える
-1

私はあなたの例を.eachで得ていません.多分あなたは.mapを意味していました

&:method_name を渡すと、ブロック内で実行するための省略形になります。したがって、各アイテムにこのメソッドを適用します。

于 2013-03-25T17:38:02.730 に答える