gpt4 book ai didi

ruby-on-rails - 带有返回语句的 block 上的 Ruby 产量不一致

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:24 27 4
gpt4 key购买 nike

我正在尝试了解 ruby​​ 如何处理 yield 和 return 语句,并注意到有时,带有 return 语句的 block 上的 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

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

def baz
yield
puts 'Hi'
end

def bif
baz do
return 'asdf'
end
end

bif
=> nil

yield 之后的“puts 'Hi'”根本没有运行,我不确定为什么。

最佳答案

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

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

关于ruby-on-rails - 带有返回语句的 block 上的 Ruby 产量不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18345641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com