【发布时间】:2016-03-24 15:53:11
【问题描述】:
file1 需要file2,我希望能够在某些条件下取消评估file2 而无需退出整个过程。
# file1.rb
puts "In file 1"
require 'file2'
puts "Back in file 1"
# file2.rb
puts "In file 2"
# return if some_conditional
puts "Still in file 2"
运行file1时,我想看到的输出是:
In file 1
In file 2
Back in file 1
目标是Still in file 2 永远不会打印,而Back in file 1 会打印。 我可以在file2 做些什么来实现这一点?
我不能在这里使用exit/exit!/abort,因为Back in file 1 永远不会打印。我可以使用raise/fail,但要做到这一点,我必须更改file1 和rescue 失败的require。我希望找到一种不涉及更改file1的方法。
更新:
一个“顶级回归”功能has been added。
【问题讨论】:
-
您可能已经提供了一个简化的示例来说明您的观点。可能如果您能告诉我们您想要达到的目标,那么,可能有人可以提供更好的帮助。至少,让我们避免任何XY problem
-
这里没有 X 或 Y。我习惯于让 Ruby 做任何事情,但它不能做到这一点让我感到很奇怪。如果可能的话,我想知道如何。
-
我认为这个问题没有很好地说明。正如 steenslag 的回答一样,您可以做任何事情来使
A中的A之后的剩余部分不成为代码的一部分。那是微不足道的。将代码写入您不想执行的文件中似乎没有意义。A之后的部分在任何情况下都可以执行吗? -
有一个 Ruby 问题讨论添加这样的功能:bugs.ruby-lang.org/issues/4840。目前我认为你只需要用条件将代码包装在所需的文件中。
-
@matt 感谢您的链接。这正是我正在寻找的讨论。
标签: ruby return exit abort raise