可能重复:
What does map(&:name) mean in Ruby?
What do you call the &: operator in Ruby?这是&意味着什么?
只是看一些railscast,看到这样的代码:
[Category, Product, Person].each(&:delete_all)
我知道,它会清除这些模型中的所有记录,但我找不到这&:delete_all
的意思。
可能重复:
What does map(&:name) mean in Ruby?
What do you call the &: operator in Ruby?这是&意味着什么?
只是看一些railscast,看到这样的代码:
[Category, Product, Person].each(&:delete_all)
我知道,它会清除这些模型中的所有记录,但我找不到这&:delete_all
的意思。
它基本上简写本:
[Category, Product, Person].each { |e| e.delete_all }
也就是说,它发送delete_all
给迭代的每个元素。
&:delete_all基本上翻译成| obj | obj.delete_all。和号在循环中的当前对象上调用to_proc。
当你把一个Proc
对象pr
与&
在最后一个参数位置,如:
some_method(&pr)
然后,对应于pr
块将被传递到some_method
。如果一个对象non_pr
这不是一个Proc
给出像:
some_method(&non_pr)
然后,non_pr
将隐含地被to_proc
转换为Proc
。
例如,当non_pr
是Symbol
,然后Symbol#to_proc
将被应用,这恰好是这样的:
class Symbol
def to_proc
proc{|obj, *args| obj.send(self, *args)}
end
end
特别是随着each(&:delete_all)
,所述:delete_all.to_proc
将返回Proc
对象:
proc{|obj, *args| obj.delete_all(*args)}
所以相应的块会被传递到each
像这样:
each{|obj, *args| obj.delete_all(*args)}
我注意到一个块为Enumerable#each
的元数是一个,它被简化成:
each{|obj| obj.delete_all}
这是已经被问和回答了这里在计算器上不低于20个其他问题重复:[了解\ [ClassOne,ClassTwo \] .each \(&:my_method \)](http://StackOverflow.Com/q/99318/),[Ruby中的map(&:name)是什么意思? ](http://StackOverflow.Com/q/1217088/),[Ruby中'&:capitalize'究竟是什么?](http://StackOverflow.Com/q/1792683/),[Ruby/Ruby on Rails &符号冒号捷径](http://StackOverflow.Com/q/1961030/),[Ruby:'&:symbol'语法](http://StackOverflow.Com/q/2096975/),... –
... [这是什么'&:last' Ruby构造调用?](http://StackOverflow.Com/q/2211751/),[你在Ruby中叫什么'&:'操作符?](http://StackOverflow.Com/q/2259775/),[什么是' map(&:name)'在这个Ruby代码中做些什么?](http://StackOverflow.Com/q/2388337/),[在ruby中是什么':+'和'&+?](http:// StackOverflow.Com/q/2697024/),'Post.published.collect(&:views_count)'中的''&:views_count''](http://StackOverflow.Com/q/3888044/),[Ruby Proc语法] (http://StackOverflow.Com/q/4512587/),['(1..4).inject(&:+)'“如何在Ruby中工作](http://StackOverflow.Com/q/ 5003257 /),... –
... [Ruby映射方法语法问题](http://StackOverflow.Com/q/5231919/),[以下语句是什么&&:property'?](http://StackOverflow.Com/ q/5620411 /),[在下面的ruby语法中,'&是什么意思?](http://StackOverflow.Com/q/5952175/),[为什么会在ruby中的属性上使用一元运算符?即'&:first'](http://StackOverflow.Com/q/6289084/),[Array#map'如何具有这样的参数?](http://StackOverflow.Com/q/ 6716629 /),['&:'是什么意思,在红宝石中,是否与符号混合在一起?](http://StackOverflow.Com/q/9188362/),... –