Ruby Code Kata:LocalJumpError:yield out of block

时间:2014-06-05 21:05:49

标签: ruby

我正在尝试使用简单的红宝石卡塔。我不太了解收益的概念,所以我真的不明白这个错误意味着什么:

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")

第一个测试用例通过但第二个测试用例没有通过。不应该通过。返回产量应该在块的早期停止功能。如果方法调用没有块,那么它应该直接指向"不计算"正确?

2 个答案:

答案 0 :(得分:3)

您想使用block_given?

def compute
  return yield if block_given?
  "Do not compute"
end

yield总是期望一个块屈服,所以如果没有块,你必须自己阻止收益。值得庆幸的是,内置方法block_given?可以告诉您是否提供了阻止。

答案 1 :(得分:0)

尝试删除return语句。

一旦调用return,就退出方法,因此永远不会达到“不计算”语句。