Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Ruby异常类更改为将文本前置到原始异常消息_Ruby_Exception - Fatal编程技术网

将Ruby异常类更改为将文本前置到原始异常消息

将Ruby异常类更改为将文本前置到原始异常消息,ruby,exception,Ruby,Exception,有一个原始异常类是StandardError的子类,它的异常作为raise RequiredArgumentMissingeError'message'抛出。在我的应用程序中,我需要更改此类,以便将其异常显示为用户ERROR:message。如何更改原始异常类以将我的消息部分预先添加到它 原始异常类: class Thor class RequiredArgumentMissingError < StandardError end end 类雷神 类RequiredArgumen

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

原始异常类:

class Thor
  class RequiredArgumentMissingError < StandardError
  end
end
类雷神
类RequiredArgumentMissingeError
我的应用程序:

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

EDIT在我的应用程序中,我没有明确提出
RequiredArgumentMissingError
,它是由
Thor
类中的其他类/方法提出的。因此,我不能从中实际生成子类,但我需要保留原始类名,但更改实现。这可能吗?

请注意,即使CLI是Thor的子类,
CLI::RequiredArgumentMissingError!=Thor::RequiredArgumentMissingError
如果再次在CLI中定义内部类。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

如果您执行
引发RequiredArgumentMissingError,“message”
`,您会得到“RequiredArgumentMissingError:message”作为消息。您确定
引发“message”
引发该异常类吗?说提升字符串总是引发RuntimeError。当我应该重新定义RequiredArgumentMissingeError时,为什么我要重新定义RuntimeError?然后我误解了你的问题-正如你指出的,
raise“text”
总是引发RuntimeError。当然,您可以在
Exception
的任何子类中执行相同的操作。但是如果RequiredArgumentMissingError是你的类,你当然可以在没有别名的情况下做得更干净。我提出必要的理由。RequiredArgumentMissingError不是我的类,而是thor gem的一个类,所以我只能重新定义它,而不是子类。我没有注意到你的编辑,也没有注意到你在完全更改答案以匹配你的问题之前接受了答案。但它仍然应该以更简单的方式解决这个问题。