【发布时间】:2019-09-08 04:20:52
【问题描述】:
我想要一种退出开始/结束块的方法,同时仍然分配其结果所分配给的变量。
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 只能在循环中工作。有什么东西在我的想法中起作用吗?
目前我可以做到但希望避免的方式:
- 在开始块中分配变量并返回
- 将开始块的剩余部分放入 if 语句中
- 在开始块之前执行计算
似乎有很多关于打破障碍的相关问题,但我找不到能回答这个特定版本的问题(可能是因为不可能)。
【问题讨论】:
-
我不明白你为什么没有得到 void value 异常
SyntaxError。当解析器无法确定如何分配值时会发生这种情况,这里是由return语句引起的(即使它曾经是return "leaving early" if false)。这就是我在 v2.6.1 中得到的。您使用的是哪个 Ruby 版本? -
@CarySwoveland 不错。如果您在退货后有一些东西,例如
puts "finished"或只是一些要退货的值,看起来它可以工作 -
是的,但还是很奇怪。
标签: ruby memoization