【发布时间】:2017-04-05 17:22:08
【问题描述】:
为什么 ruby 中的 Proc 在调用 Proc 的方法中执行剩余代码之前返回?
def hello
a = Proc.new{ return }
a.call
puts "Hello"
end
def proc
hello
puts "Proc"
end
此处return 将跳过puts "Hello" 并仅打印puts "Proc"
但是lambda 也会打印出puts "Hello"。
这是什么原因?
【问题讨论】:
-
“这是什么原因?” - 因为这些是具有不同行为的不同事物。这是它们之间的区别之一。
-
有时您确实想从整个事物中返回,而不仅仅是从块中返回。做作和愚蠢的例子:
def find_even; [1, 2, 3].each {|elem| return elem if elem.even? }; end。因此,如果是这种情况,请使用 block/proc。如果你想要相反,使用 lambda。 -
我在代码中没有看到
lambda。