簡體   English   中英

傳遞proc對象時測試(&p)和測試(p)之間的區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM