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 回答