ruby - 如何从eval内部返回?

Son*_*tos 6 ruby eval

我有一个代码,我需要在其中使用eval.有时我需要退出eval代码,但我的尝试会导致错误.

例如:

# expected to see 1, 2 and 5; not 3 nor 4; and no errors
eval "puts 1; puts 2; return; puts 3; puts 4"   # => Error: unexpected return
puts 5
Run Code Online (Sandbox Code Playgroud)

我试着用return,end,exit,break,,我不能得到成功.exit不会引起错误,但是我没有得到5.

(注意:我知道这eval是邪恶的,但在这种情况下我需要使用它.)

Son*_*tos 5

谢谢大家,但我找到了最适合我的问题的解决方案:

lambda do
  eval "puts 1; puts 2; return; puts 3; puts 4"
end.call
puts 5
Run Code Online (Sandbox Code Playgroud)

这样return里面就可以使用直观的关键字eval来成功的从中出来了。

end在这种情况下,我不喜欢类似条件的解决方案,因为它会迫使我(或用户)在末尾添加一个。

关于使用throw/catchor break,我认为return关键字更直观。