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 のサブクラスであっても、CLICLI::RequiredArgumentMissingError != Thor::RequiredArgumentMissingError内で再度内部クラスを定義する場合は注意してください。Thor クラスのオリジナル メソッドは、クラスを上げThor::RequiredArgumentMissingErrorます。したがって、このクラスを再定義します。目的を達成する最も簡単な方法は、initialize メソッドを定義することです。

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 に答える