我试图了解 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
收益率之后的“放置'嗨'”根本没有运行,我不知道为什么。