将异常类与特定的错误消息格式联系起来。
1. 若已经在类定义中使用extend语句添加了Exception2MessageMapper的话,就可以使用def_e2message和def_exception方法了。这样就可以将异常类与消息联系起来。
class Foo extend Exception2MessageMapper def_e2message ExistingExceptionClass, "message..." def_exception :NewExceptionClass, "message...", StandardError ... end foo = Foo.new foo.Fail ....
2. 若您想多次使用同一个异常类时,可以将它写成模块,然后再include该模块就可以了。
module ErrorMod extend Exception2MessageMapper def_e2meggage ExistingExceptionClass, "message..." def_exception :NewExceptionClass, "message...", StandardError ... end class Foo include ErrorMod ... end foo = Foo.new foo.Fail ....
3. 您还可以在异常类的实例之外调用异常。
module ErrorMod extend Exception2MessageMapper def_e2message ExistingExceptionClass, "message..." def_exception :NewExceptionClass, "message...", StandardError ... end class Foo extend Exception2MessageMapper include ErrorMod ... end Foo.Fail NewExceptionClass, arg... Foo.Fail ExistingExceptionClass, arg...
将已存在的异常类exception与错误消息格式message_form联系起来。message_form的形式与sprintf()中的format字符串的形式相同。
该格式用在Raise(或其别名Fail)中。
生成名为exception_name的异常类(将符号传给exception_name)。若设置了superclass时,该异常类就是superclass的子类。若没有设置superclass时,该异常类就是StandardError的子类。
然后将该异常类与message_form指定的格式联系起来,就可以在Raise(或其別名Fail)中使用了。
引发error类的错误。
error后续的args参数群将和错误消息格式一起出现在错误消息中。例如,若给出下面的定义的话
class Foo
extend Exception2MessageMapper
def_exception :NewExceptionClass, "message...%d, %d and %d"
def foo
Raise NewExceptionClass, 1, 2, 3
end
end
就可以使用下面的方法
Foo.new().foo()
来引发如下错误。
in `Raise': message...1, 2 and 3 (Foo::NewExceptionClass)
另外,下面的这个方法
Foo.Raise Foo::NewExceptionClass, 1, 3, 5
也会引发如下错误
in `Raise': message...1, 3 and 5 (Foo::NewExceptionClass)
它是Raise的别名。