直接発生する Ruby 例外に含まれるメッセージと、eval 内から発生するメッセージとの間に奇妙な不一致があるようです。たとえば、次のコード:
def foo
raise "Help!"
end
puts "\nRescue foo"
begin
foo
rescue RuntimeError => e
puts e.message
end
puts "\nRescue eval 'foo'"
begin
eval "foo"
rescue RuntimeError => e
puts e.message
end
次の出力が生成されます。
Rescue foo
Help!
Rescue eval 'foo'
./temp.rb:2:in `foo': Help!
正規表現を使用してそれをサブする以外に、2番目のケースでコンテキストなしで例外を発生させる方法はありますか?