题
有似乎是包含在直接升高和从evals内升高红宝石异常的消息之间的奇数差异。例如,下列代码:
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!
使用正则表达式的子出来的短,是没有什么办法可提高异常而不在第二种情况下?
的上下文解决方案
这是不寻常的,我还没有跨过面前。我看不出说服EVAL不添加这些信息的一种方式,所以无论你做的正则表达式改写(munging)你提到,或者你可以定义自己的错误类型:
class MyError < RuntimeError
attr_accessor :my_message
def initialize(m)
@my_message = m.dup
super
end
end
def foo
raise MyError.new("Help!")
end
puts "\nRescue eval 'foo'"
begin
eval "foo"
rescue RuntimeError => e
puts e.my_message
end
使用输出:
Rescue eval 'foo'
Help!
在什么比一个简单的脚本时,定义自己的错误类型是很好的做法呢。
(更新以修复行代码什么克里斯在他回答说)
其他提示
感谢。我反正定义我自己的错误,所以这是一个容易解决。
我做了轻微的变化,从而使超类被初始化,以及:
class MyException < RuntimeError
attr_accessor :my_message
def initialize(m)
@my_message = String.new(m)
super
end
end
(所述String.new呼叫似乎有需要,以避免再次获取旧的行为;。想必Exception.new修改消息就地)
不隶属于 StackOverflow