2017-04-05 85 views
0

爲什麼Proc在調用Proc的方法中執行剩餘代碼之前會返回ruby?proc return vs lambda return

def hello 
    a = Proc.new{ return } 
    a.call 
    puts "Hello" 
end 


def proc 
    hello 
    puts "Proc" 
end 

這裏return將只跳過puts "Proc"

puts "Hello"和版畫但lambda打印puts "Hello"爲好。

這是什麼原因?

+3

的代碼的一部分,「什麼是這個原因嗎?」 - 因爲這些行爲是不同的。這是他們之間的差異之一。 –

+1

有時候你確實想從整個事物中返回而不僅僅是塊。聳人聽聞的愚蠢的例子:'def find_even; [1,2,3] .each {| elem |如果elem.even返回元素? }; end'。所以,如果是這樣的話,請使用block/proc。如果你想相反,使用lambda。 –

+0

我在代碼中看不到'lambda'。 –

回答

2

您應該看到這個答案https://stackoverflow.com/a/723/4576274評論。

它指出

一個lambda是匿名方法。由於這是一種方法,因此它會返回一個值 ,並且調用該方法的方法可以使用它, 包括忽略它並返回一個不同的值。

一個PROC就像一個代碼段 粘貼。它不像一種方法。所以,當一個 回發生在PROC中,這僅僅是 方法調用它

+0

邏輯答案。 – InQusitive