【发布时间】:2012-01-10 23:52:40
【问题描述】:
我是 Ruby 新手,很惊讶这个 sn-p 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
如果我在def method中将bail_if定义为局部变量,那么就没有问题了。这是为什么呢?
【问题讨论】:
-
在 ruby 1.8.7 上为我工作。你在运行 ruby 1.9 吗?
-
糟糕,忘了说我使用的是 1.9.2p290。谢谢!
-
您问这个是因为如果
some_condition为真,您希望method返回,否则继续运行method方法的其余部分?顺便说一句,method不是一个理想的名字,因为已经有a method called method -
@Squeegy:这是因为
proc在 1.8 和 1.9 中的行为不同 - 在 1.8 中它返回一个 lambda,而在 1.9 中它返回一个 proc。见要点 2 here -
@AndrewGrimm,是的,我问这个是因为如果
some_condition为真,我希望method返回,否则继续运行method的其余部分。