1

有一个原始异常类是 的子类,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。所以我实际上不能继承它,但我需要保留原始类名但更改实现。这有可能吗?

4

1 回答 1

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
于 2013-04-28T08:55:02.277 回答