可能重复:
map(&:name)在Ruby中意味着什么?
在Ruby中,我知道如果我这样做:
some_objects.each(&:foo)
Run Code Online (Sandbox Code Playgroud)
它是一样的
some_objects.each { |obj| obj.foo }
Run Code Online (Sandbox Code Playgroud)
也就是说,&:foo创建块{ |obj| obj.foo },将其转换为Proc,并将其传递给每个块.为什么这样做?它只是一个Ruby特例,还是有理由为什么这样做呢?
Aug*_*aas 471
你的问题是错的,可以这么说.这里发生的不是"&符号和冒号",它是"&符号和对象".在这种情况下,冒号是符号.所以,有&,有:foo.
对对象的&调用to_proc,并将其作为块传递给方法.在Rails to_proc中实现Symbol,以便这两个调用是等效的:
something {|i| i.foo }
something(&:foo)
Run Code Online (Sandbox Code Playgroud)
另外,to_procon Symbol在Ruby 1.8.7和1.9中实现,所以它实际上是一个"红宝石".
这样,总结一下:&调用to_proc该对象上,并将其作为一个块的方法,和Ruby实现to_proc上Symbol.
Mic*_*are 84
&符号和符号的组合没有什么特别之处.这是(ab)使用正则表达式的示例:
class Regexp
def to_proc
->(str) { self =~ str ; $1 }
end
end
%w(station nation information).map &/(.*)ion/
=> ["stat", "nat", "informat"]
Run Code Online (Sandbox Code Playgroud)
或整数.
class Integer
def to_proc
->(arr) { arr[self] }
end
end
arr = [[*3..7],[*14..27],[*?a..?z]]
arr.map &4
=> [7, 18, "e"]
Run Code Online (Sandbox Code Playgroud)
arr.map(&:fifth)你有arr.map &4什么需要的?
| 归档时间: |
|
| 查看次数: |
92031 次 |
| 最近记录: |