1
def makeProc(&obj)
obj
end
puts makeProc{|x,y| x+y}.class
當一個塊作爲參考傳遞給它時,obj如何成爲一個Proc類型?有沒有任何理由,或者它就像某種紅寶石魔法?這是如何創建一個proc對象?
def makeProc(&obj)
obj
end
puts makeProc{|x,y| x+y}.class
當一個塊作爲參考傳遞給它時,obj如何成爲一個Proc類型?有沒有任何理由,或者它就像某種紅寶石魔法?這是如何創建一個proc對象?
參數列表中的&
符號和一元前綴sigil表示所謂的「塊參數」。它基本上意味着像「將塊參數包裝在適當的Proc
對象中並將其綁定到此參數名稱」。
請記住:塊應該是語法和語義輕量級的,它們實現這一點的一種方式是,它們不是對象,也不能被命名。這樣做的結果是,你只能做三件事情塊:
yield
他們block_given?
)這就是它。如果你想做任何事情之外,你需要a)一個對象和b)一個名字,這是和號和一元前綴sigil所做的。
在參數列表時,&
&符元前綴操作者確實逆:它解開一個Proc
對象成塊(或,如果對象不是Proc
已經時,它發送它的to_proc
消息以將其轉換成Proc
)。
是的我只是做了一個硬性檢查,你當然是正確的,'Proc.new'永遠不會被調用。我應該在發佈之前完成此操作。我從中收集了這個理論的教科書(一個着名的教科書),在這個過程中清楚地暗示了'Proc.new'被調用,所以我犯了一個真正的錯誤。 –