[英]Difference between test(&p) and test(p) when passing a proc object?
如果我有這個:
pr = Proc.new { puts 'test' }
有什么區別:
def test(arg)
arg.call
end
test(pr)
和
def test(&arg)
arg.call
end
test(&pr)
兩者都返回相同的東西,所以我什么時候才能使用其中一個?
&
通過to_proc
方法將塊更改為proc,將對象更改為塊。
兩者之間的區別在於,在第一個中,您直接傳遞一個proc參數。 在第二個中,您將proc作為塊傳遞給方法,該方法在接收時轉換回proc。 在第一個中,proc保持相同的對象,但在第二個中,原始proc和接收的proc是不同的對象。
在這種情況下,當你有一個在變量/常量中傳遞的proc時,最好使用第一個,因為將proc轉換為塊並返回到proc,就像在第二個中那樣是冗余計算。 如果要直接傳遞塊,則應使用第二個選項。
test(arg)
接受一個參數 ,通過test(pr)
將Proc
對象傳遞給方法test
方法。
test(&arg)
接受零參數但接受一個塊 ,你通過test(&pr)
將塊傳遞給&pr
到方法test
。
&pr
在傳遞給方法時將Proc pr
轉換為塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.