use*_*951 10 ruby return raise exit abort
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"
Run Code Online (Sandbox Code Playgroud)
运行时file1,我想看到的输出是:
In file 1
In file 2
Back in file 1
Run Code Online (Sandbox Code Playgroud)
目标是Still in file 2永不打印,同时Back in file 1打印.我能做些什么才能做到file2这一点?
我无法使用exit/ exit!/ abort这里,因为Back in file 1永远不会打印.我可以使用raise/ fail,但为了做到这一点,我将不得不改变file1和rescue失败require.我希望找到一种不涉及改变的方法file1.
更新:
A"顶级回报"的功能已经被添加.
以下行__END__ 不会被执行.
# file2.rb
puts "In file 2"
__END__
puts "Still in file 2" # Never gets called
Run Code Online (Sandbox Code Playgroud)
更新:
增加了“顶级返回”功能。
原来的:
评论者matt指出,功能 4840自 2011 年 6 月以来一直在讨论,该功能完全符合我的要求。此外,截至 2015 年 11 月,有关 Ruby 新功能的核心团队会议仍在讨论该功能。
设计这样的功能有很多困难;对于优点和缺点的列表,我强烈建议查看讨论。
提议的功能将允许在使用以下任何顶级语句时退出所需的文件:
if condition
return
end
while condition
# ...
return
end
begin
# ...
return
rescue
# ...
return
ensure
# ...
return
end
Run Code Online (Sandbox Code Playgroud)
并且在以下语句中不会退出所需的文件:
class Foo
return # LocalJumpError
end
def foo
return # returns from method, not from required file
end
proc do
return # LocalJumpError
end
x = -> { return } # returns as from lambda, not from required file
Run Code Online (Sandbox Code Playgroud)
由于该功能仍未实现,我已向steenslag授予赏金,奖励其成功解决问题(如最初所写),即使不是精神上的。
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |