我經常寫:Ruby中的隱式產量呢?
some_array.each { |array_element| array_element.some_method(args) }
爲什麼不能有一個選項,一個隱含的收益率,所以你可以寫例如:
some_array.each { _.some_method(args) }
我不知道什麼字符_
實際上應該是,我想它只能用在最多的樣板設置中,在那裏你正在處理一維數組,並且試圖連續地將每個項目放到塊中。這將節省大量的重複輸入。
我經常寫:Ruby中的隱式產量呢?
some_array.each { |array_element| array_element.some_method(args) }
爲什麼不能有一個選項,一個隱含的收益率,所以你可以寫例如:
some_array.each { _.some_method(args) }
我不知道什麼字符_
實際上應該是,我想它只能用在最多的樣板設置中,在那裏你正在處理一維數組,並且試圖連續地將每個項目放到塊中。這將節省大量的重複輸入。
您是否熟悉方法調用的#to_proc
和&
語法?它們涵蓋了一些與您在此展示的相似的情況。例如:
[1, -2, -4].map(&:abs) => [1, 2, 4]
的&
用來傳遞一個對象以代替塊的。如果對象不是Proc
,則在它用於代替塊之前,會自動調用#to_proc
以獲得Proc
。 Symbol#to_proc
返回一個Proc
,其行爲如下:{ |obj, *args| obj.symbol_name(*args) }
。
在您的示例中,您使用的是args
,它們大概是從周圍的詞彙環境中捕獲的。 Symbol#to_proc
不會幫助你。但要做出新的構建方法並不難。例如:
class Symbol
def with_args(*args)
Proc.new { |x| x.send(self, *args) }
end
end
然後,你可以這樣做:
some_array.each(&:some_method.with_args(args))
不管是不是明確的塊是給你任何好轉。無論如何,這是一種你應該知道的技巧。
有趣的想法。這個實現將是一個問題,但這是一個細節:'A類; def a;放'嗨';結束;結束','_ = A.new',_.a#=> hi'。 – 2014-11-03 07:15:33