我正在尝试使用简单的红宝石卡塔。我不太了解收益的概念,所以我真的不明白这个错误意味着什么:
LocalJumpError: yield called out of block
基本上我只是试图通过这段代码来传递这些测试用例:
def compute
return yield
"Do not compute"
end
Test.expect(compute { "Block" }, "Block")
Test.expect(compute, "Do not compute")
第一个测试用例通过但第二个测试用例没有通过。不应该通过。返回产量应该在块的早期停止功能。如果方法调用没有块,那么它应该直接指向"不计算"正确?
答案 0 :(得分:3)
您想使用block_given?
def compute
return yield if block_given?
"Do not compute"
end
yield
总是期望一个块屈服,所以如果没有块,你必须自己阻止收益。值得庆幸的是,内置方法block_given?
可以告诉您是否提供了阻止。
答案 1 :(得分:0)
尝试删除return语句。
一旦调用return,就退出方法,因此永远不会达到“不计算”语句。