gpt4 book ai didi

ruby - ruby block 中 'return' 关键字的行为

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:37 24 4
gpt4 key购买 nike

谁能解释一下下面的行为

def iterate
return yield
return "end of iterate"
end

def test_iterate
assert_equal( "end of iterate", iterate { return "end of block" } )
assert_equal( "end of block", iterate { "end of block" } )
end

我知道 Procs(也就是 block )应该在它们被调用的范围内返回。 (与 lambda 不同)考虑到这一点,测试中的两个调用不应该返回“ block 结束”吗?

这个测试通过了'ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]' ( OSX 10.6.7 )

最佳答案

return 关键字从词法封闭方法返回。即,*test_iterate*。

要以动态作用域的方式从 block 中返回特定值,您应该改用 break 关键字。

在你的情况下:

iterate { break("end of block") }

测试将失败。因为 iterate 方法的第二个 return 语句永远不会运行。

预期的语义应该通过使用异常来完成:

def iterate
return yield
rescue :exception
return "end of iterate"
end

def test_iterate
assert_equal( "end of iterate", iterate { raise :exception } )
assert_equal( "end of block", iterate { "end of block" } )
end

关于ruby - ruby block 中 'return' 关键字的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733294/

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