e2mmap.rb -- Exception2MessageMapper

将异常类与特定的错误消息格式联系起来。

Usage

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...

Methods

def_e2message(exception, message_form)

将已存在的异常类exception与错误消息格式message_form联系起来。message_form的形式与sprintf()中的format字符串的形式相同。

该格式用在Raise(或其别名Fail)中。

def_exception(exception_name, message_form, superclass)

生成名为exception_name的异常类(将符号传给exception_name)。若设置了superclass时,该异常类就是superclass的子类。若没有设置superclass时,该异常类就是StandardError的子类。

然后将该异常类与message_form指定的格式联系起来,就可以在Raise(或其別名Fail)中使用了。

Raise(error, [args [,args2...]])

引发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)  
Fail(error, [args [,args2...]])

它是Raise的别名。