这个问题在这里已经有答案了:
八年前关闭的
可能重复:
map(&;:name)在Ruby中是什么意思
在Ruby中,我知道如果我这样做:
一些对象。每个(&;:foo)
这和
一些_objects.each{| obj | obj.foo}
也就是说,&;:foo创建块{|obj | obj.foo},将其转换为一个进程,并将其传递给每个进程。为什么这样做有效?这仅仅是Ruby的一个特例,还是有理由这样做
可以说,你的问题是错的。这里发生的事情不是;“符号和冒号”;,是”,;“符号和对象”;。本例中的冒号表示符号。所以,这里有&还有:foo
&调用对象上的以_proc,并将其作为块传递给方法。在Ruby中,to_proc是在Symbol上实现的,因此这两个调用是等效的:
something{| i | i.foo}
某物(&;:foo)
总之:&在对象上调用到_proc,并将其作为块传递给方法,Ruby在符号上实现到_proc