2017-04-05 81 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