更改Ruby异常类以将文本添加到原始异常消息

时间:2013-04-28 08:11:03

标签: ruby exception

有一个原始异常类是StandardError的子类,它的异常被抛出为raise RequiredArgumentMissingError 'message'。在我的应用程序中,我需要更改此类,以便将其异常显示给用户ERROR: message。如何更改原始异常类以将我的部分消息添加到其中?

原始异常类:

class Thor
  class RequiredArgumentMissingError < StandardError
  end
end

我的应用:

class CLI < Thor
  class RequiredArgumentMissingError
    # I need to prepend 'ERROR: ' to the original exception message here
  end
end

编辑我没有在我的应用中明确提出RequiredArgumentMissingError,它是由Thor类中的其他类/方法引发的。所以我实际上不能从它继承,但我需要保留原始的类名,但更改实现。这有可能吗?

1 个答案:

答案 0 :(得分:2)

请注意,即使CLI是Thor的子类,CLI::RequiredArgumentMissingError != Thor::RequiredArgumentMissingError如果再次在CLI中定义内部类。 Thor类中的原始方法将引发Thor::RequiredArgumentMissingError类。所以你想要重新定义这个类。实现所需目标的最简单方法是定义初始化方法。

class Thor
    class RequiredArgumentMissingError
         def initialize str
             super("ERROR: "+str)
         end
    end
end

如果初始化已经定义并且很复杂,你可以使用别名并从覆盖的方法中调用原始初始化方法,如下所示:

class Thor
    class RequiredArgumentMissingError
        alias :orig_initialize :initialize
        def initialize msg
            orig_initialize("ERROR: "+msg)
        end
    end
end