4

我一直在玩 Codecademy Ruby 课程,并且有一个关于 lambdas 和 Procs 的练习。我确实理解其中的区别,但我不太明白为什么这里列出的第一个代码有效,而第二个无效。

为什么会这样:

def batman_ironman_proc
  p = Proc.new { return "Batman will win!" }
  p.call
  "Iron Man will win!"
end

puts batman_ironman_proc  # prints "Batman will win!"

但不是这个:

def batman_ironman_proc(p)
  p.call
  "Iron Man will win!"
end

p = Proc.new { return "Batman will win!" }
puts batman_ironman_proc(p)  # unexpected return
4

1 回答 1

3

这是因为proc控制流关键字的行为方式:return, raise, break, redo,retry等等。

这些关键字将从proc定义的范围跳转,否则lambda有自己的范围,因此这些关键字将从lambda's范围跳转。

在您的第二个示例中,它proc是在 main 范围内定义的。并且tadman如下所述,您不能从 中返回main,只有exit可用。

如果您从 切换到 ,您的代码将proc起作用lambda

于 2013-02-08T15:07:35.170 回答