混淆Array#each
如下:
%w{ david black }.each {|str| str.capitalize }
#=> ["david", "black"]
上面的代码很酷,但是下面的逻辑是如何工作的,无法理解。
%w{ david black }.each(&:capitalize)
#=> ["david", "black"]
混淆Array#each
如下:
%w{ david black }.each {|str| str.capitalize }
#=> ["david", "black"]
上面的代码很酷,但是下面的逻辑是如何工作的,无法理解。
%w{ david black }.each(&:capitalize)
#=> ["david", "black"]
这是一个非常古老的技巧,叫做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]
的表示法&:something
对数组的每个元素执行方法something
。
这通常与 map 一起使用以更改数组的每个条目或从哈希中提取数据。
[{:foo => :bar, :meh => :bar2}, {:foo => :one, :meh => :two}].map(&:foo)
=> [:bar, :one]
使用地图怎么样?
[1173]pry(main)> ["david","black"].map{|str| str.capitalize }
=> ["David","Black"]
[1173]pry(main)>
我没有用 .each 来举例,也许你的意思是 .map
当您传入 &:method_name 时,它是在块中执行此操作的简写。因此,对于每个项目都应用此方法。