与Array#each
混淆如下:
%w{ david black }.each {|str| str.capitalize }
#=> ["david", "black"]
以上代码很酷,但下面的逻辑如何工作,无法理解。
%w{ david black }.each(&:capitalize)
#=> ["david", "black"]
答案 0 :(得分:3)
这是一个非常古老的技巧,名为Symbol#to_proc
。
您可以在此处详细了解:http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html
基本上,它是调用不带args的方法的捷径。例如,经常在map
中使用。
%w[i can measure length of strings].map(&:length) # => [1, 3, 7, 6, 2, 7]
答案 1 :(得分:0)
如何使用地图?
[1173]pry(main)> ["david","black"].map{|str| str.capitalize }
=> ["David","Black"]
[1173]pry(main)>
答案 2 :(得分:0)
&:something
的符号对方法something
的数组的每个元素都有效。
这通常与map一起用于更改数组的每个条目或从哈希中提取数据。
[{:foo => :bar, :meh => :bar2}, {:foo => :one, :meh => :two}].map(&:foo)
=> [:bar, :one]
答案 3 :(得分:-1)
我没有得到.each的例子,也许你的意思是.map
当您传入&:method_name时,它是在块中执行此操作的简写。因此,对于每个项目都应用此方法。