對於數組中的元素迴應,我可以做紅寶石適用看跌數組
[1,2,3].each(&:to_s)
方法,但對於:
[1,2,3].each {|i| puts i}
我不能這樣做:
[1,2,3].each(&:puts)
如何優雅地將Kernel
方法(如puts
)應用於數組中的對象?會不會有Rubyish的方式?
對於數組中的元素迴應,我可以做紅寶石適用看跌數組
[1,2,3].each(&:to_s)
方法,但對於:
[1,2,3].each {|i| puts i}
我不能這樣做:
[1,2,3].each(&:puts)
如何優雅地將Kernel
方法(如puts
)應用於數組中的對象?會不會有Rubyish的方式?
puts
是一種方法,在定義Kernel
將其轉換爲proc
,使用:
[1,2,3].each(&method(:puts))
Symbol#to_proc
有特定的含義,基本上本身發送到接收器。
有人可能的任何方法轉化爲proc
通過它來阻止:
%w[1 2 3].map(&method(:Integer))
#⇒ [1, 2, 3]
謝謝。正是我在找什麼。現在,我只需要等10分鐘,然後SO就可以將其標記爲「答案」 –
爲了讓其他人更好地瞭解這個問題,在這種情況下,前導'&'是通過對象的參數將參數轉換爲塊'to_proc'方法。例如'&:to_s'(問題是'Symbol#to_proc')和'&method(:puts)'(如答案中)是'Method#to_proc'。對於'Symbol#to_proc',將'Symbol'發送到block參數,其中'Method#to_proc'將block參數發送給'Method' – engineersmnky
這很整潔,除了我認爲OP的最後一個例子更具慣用性,更多重要的是,比這些例子更容易理解...... – maerics
你的最後一個例子是慣用的紅寶石:
[1,2,3].each { |x| puts x }
當然,還有其他方法可以做到同樣的事情,但上面的代碼很簡單,任何Rubyist都很容易理解。
你的最後一個例子對我來說似乎很紅寶石...... – maerics
'puts [1,2,3]'? –