【问题标题】:proc return vs lambda returnproc return vs lambda return
【发布时间】: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

标签: ruby lambda proc


【解决方案1】:

您应该会在此答案https://stackoverflow.com/a/723/4576274 中看到评论。

说明

lambda 是一种匿名方法。因为它是一个方法,所以它返回一个 值,调用它的方法可以随心所欲地使用它, 包括忽略它并返回不同的值。

Proc 就像 粘贴代码sn-p。它不像一种方法。所以当一个 return 发生在 Proc 中,这只是代码的一部分 调用它的方法

【讨论】:

  • 逻辑答案。
  • 链接的答案是 12 岁,在这个答案上已经是 9 岁。与此同时,情况发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2020-02-18
相关资源
最近更新 更多