我希望有一种方式可以在退出一个begin/end块时仍然给其结果分配一个变量。
def foo
@foo ||= begin
puts "running"
return "leaving early" if true # would be some sort of calculation
# Other calculations
end
end
我希望发生的事情
> foo
running
=> leaving early
> foo
=> leaving early
实际上发生了什么
> foo
running
=> leaving early
> foo
running
=> leaving early
代码不起作用是因为return
退出整个方法而没有设置@foo
。在循环中使用break
或next
只起作用。有什么办法可以让我在begin块中实现我想要的效果吗?
目前我能想到的方法,但希望避免:
- 在begin块内赋值变量并返回
- 将begin块的其余部分放在if语句中
- 在begin块之前进行计算
似乎有很多关于跳出块的相关问题,但我找不到一个回答这个具体版本的(也许是因为不可能)。
SyntaxError
。当解析器无法确定如何分配值时,就会出现这种情况,这是由于return
语句引起的(即使它是return "leaving early" if false
)。这是我在v2.6.1中得到的结果。你使用的是哪个Ruby版本? - Cary Swovelandputs "finished"
或者只是一些要返回的值,它就能正常工作了。 - Tom Prats