Ruby classes d'erreur personnalisées: l'héritage de l'attribut message

Je n'arrive pas à trouver beaucoup d'informations sur les classes d'exception.

Ce que je sais,

Vous pouvez déclarer votre erreur personnalisés de la classe et de laisser hériter de StandardError, de sorte qu'il peut être rescued:

class MyCustomError < StandardError
end

Cela vous permet de la soulever à l'aide de:

raise MyCustomError, "A message"

et plus tard, vous obtenez ce message lorsque le sauvetage

rescue MyCustomError => e
  puts e.message # => "A message"

Ce que je ne sais pas

Je veux donner à mon exception de certains champs personnalisés, mais je veux hériter de la message attribut de la classe parent. J'ai trouvé la lecture de sur ce sujet que @message n'est pas une variable d'instance de la classe exception, donc j'ai peur que mon héritage ne fonctionne pas.

Quelqu'un peut-il me donner plus de détails à ce propos? Comment pourrais-je mettre en œuvre une erreur personnalisée classe avec un object attribut? Est la suivante correct:

class MyCustomError < StandardError
  attr_reader :object
  def initialize(message, object)
    super(message)
    @object = object
  end
end

Et puis:

raise MyCustomError.new(anObject), "A message"

pour obtenir:

rescue MyCustomError => e
  puts e.message # => "A message"
  puts e.object # => anObject

ça va fonctionner, et si elle le fait, est-ce la bonne façon de faire les choses?

  • Ne pas rescue Exception => e. Il est plus large que la valeur par défaut rescue => e qui s'étend de StandardError, et les prises de à tout, y compris les touches Ctrl+C. je ferais rescue MyCustomError => e.
  • J'ai édité ma question pour la plus bonne approche.
InformationsquelleAutor MarioDS | 2013-04-19