有似乎是包含在直接升高和从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修改消息就地)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top