我试图理解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
在收益率完全没有运行之后“把'嗨'”,我不知道为什么。
答案 0 :(得分:0)
Ruby Proc不能有return语句。似乎有效的返回语句实际上属于方法(def ... end)。
关于它的好文章: http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/