"David Garamond" <lists / zara.6.isreserved.com> schrieb im Newsbeitrag
news:4015F52B.4000700 / zara.6.isreserved.com...
> I found myself using exception object (instead of ) more and more. They
> are convenient for storing detailed information bits about the error
> (pointer to an object structure/within an object structure, some flags,
> etc).
>
> Since RCR 21[1] (New method: Exception#message=) was rejected, can
> anyone suggest a more elegant way of doing the thing below. I don't like
> having to set the message everytime. The message will be the same most
> of the time anyway, since more detailed information can be found in the
> attributes of the exception object. So I'd like to store the message in
> the exception object "template" and change them occassionally when
needed.

This is not difficult:

class MyException < Exception
  attr_accessor :msg

  def initialize(msg = "Default")
    @msg = msg
    super
  end

  def exception
    self.class.new msg
  end
end

e = MyException.new

begin
  puts "foo"
  raise e
rescue MyException => e
  p e
end

begin
  puts "foo"
  e.msg = "another error"
  raise e
rescue MyException => e
  p e
end


Although I'd prefer to have a default message at class level:

class MyException < Exception
  class <<self
    attr_accessor :msg
  end

  self.msg = "Default"

  def initialize(msg = self.class.msg)
    super(msg)
  end
end

e = MyException.new

begin
  puts "foo"
  raise e
rescue MyException => e
  p e
end

begin
  puts "foo"
  MyException.msg = "another error"
  raise MyException
rescue MyException => e
  p e
end


Regards

    robert