可能重複:
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/),... –