小编典典

Ruby&符号冒号快捷方式

all

在 Ruby 中,我知道如果我这样做:

some_objects.each(&:foo)

这是一样的

some_objects.each { |obj| obj.foo }

也就是说,&:foo创建 block { |obj| obj.foo },将其转换为 Proc,并将其传递给每个。为什么这行得通?它只是一个
Ruby 的特例,还是有理由这样工作?


阅读 124

收藏
2022-04-06

共1个答案

小编典典

你的问题是错误的,可以这么说。这里发生的不是“& 和冒号”,而是“& 和对象”。在这种情况下,冒号用于符号。所以,有&,有:foo

对对象的&调用to_proc,并将其作为块传递给方法。在 Ruby 中,to_proc是在 上实现的Symbol,因此这两个调用是等价的:

something {|i| i.foo }
something(&:foo)

因此,总结一下:&调用to_proc对象并将其作为块传递给方法,Ruby 实现to_procon Symbol.

2022-04-06