Ruby-ampersand冒号快捷方式[重复]

这个问题在这里已经有答案了

八年前关闭的

可能重复:
map(&:name)在Ruby中是什么意思

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

一些对象。每个(&:foo)

这和

一些_objects.each{| obj | obj.foo}

也就是说,&:foo创建块{|obj | obj.foo},将其转换为一个进程,并将其传递给每个进程。为什么这样做有效?这仅仅是Ruby的一个特例,还是有理由这样做

可以说,你的问题是错的。这里发生的事情不是;“符号和冒号”;,是”,;“符号和对象”;。本例中的冒号表示符号。所以,这里有&amp还有:foo

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

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

总之:&amp在对象上调用到_proc,并将其作为块传递给方法,Ruby在符号上实现到_proc

发表评论