2

我试图了解 ruby​​ 如何处理 yield 和 return 语句,并注意到有时,带有 return 语句的块上的 yield 是非法的,但有时有效。我有以下示例,我正在努力解决:

def foo
  yield
end

def bar
  foo do
    return 'asdf'
  end
end

现在在上述情况下,我知道以下将失败:

foo do
  return 'asdf'
end

> LocalJumpError: unexpected return

但是以下将起作用(尽管它会返回 nil 而不是 'asdf'):

bar
=> nil 

我的问题是为什么看起来相似的代码会有如此不同的反应?是因为返回块需要一个方法上下文来运行吗?更微妙的情况如下

def baz
  yield
  puts 'Hi'
end

def bif
  baz do
    return 'asdf'
  end
end

bif
=> nil

收益率之后的“放置'嗨'”根本没有运行,我不知道为什么。

4

1 回答 1

0

Ruby Proc 不能有 return 语句。似乎有效的返回语句实际上属于方法(def...end)。

关于它的一篇好文章: http ://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/

于 2013-08-20T22:03:52.667 回答