我是Ruby的新手,并且在阻止raise
时发现LocalJumpError
return
时感到惊讶:
$bail_if = proc { |condition|
if condition
puts 'the condition is true'
return
else
puts 'the condition is false'
end
}
def method some_condition
$bail_if[some_condition]
end
method true
如果我在bail_if
中将def method
定义为局部变量,则没有问题。这是为什么?
答案 0 :(得分:2)
将您的proc { |condition|
更改为lambda { |condition|
。 proc-object具有块语义,而lambda对象具有方法语义。因为proc对象就像一个块,当你调用执行return语句的proc时,它会尝试从包含转换为proc的块的方法返回。在第一种情况下,你没有这种方法,因此得到LocalJumpError
。当你在方法中将proc定义为局部变量时,一切正常。
答案 1 :(得分:2)
你不是来自ruby 1.9中proc(aka block)的return
。摆脱明确的return
似乎解决了这个问题。但无论如何return
在这里完全没用。
或者,如果您确实需要明确的回报,请使用lambda
,而不是@WarHog建议。