34 votes

Les classes d'erreurs d'exception de Ruby

Vous pouvez créer une sous-classe d'une exception pour la rendre plus descriptive, mais comment définir le "message" par défaut ?

class MyError < StandardError
  # default message = "You've triggered a MyError"
end

begin
  raise MyError, "A custom message"
rescue Exception => e
  p e.message
end

begin
  raise MyError
raise Exception => e
  p e.message
end

Le premier devrait afficher "Un message personnalisé".

La seconde devrait donner le résultat suivant : "Vous avez déclenché une MyError".

Des suggestions sur les meilleures pratiques ?

65voto

sepp2k Points 157757

Définissez une méthode d'initialisation, qui prend le message comme argument avec une valeur par défaut. Ensuite, appelez StandardError La méthode d'initialisation de l'utilisateur avec ce message (en utilisant la fonction super ).

class MyError < StandardError
  def initialize(msg = "You've triggered a MyError")
    super(msg)
  end
end

3voto

Andrew Vilcsak Points 2111

Vous pouvez également écraser le message dans votre sous-classe et renvoyer la chaîne de caractères que vous souhaitez afficher. Je préfère cette méthode car elle semble garder les choses un peu plus propres si vous voulez faire quelque chose d'intéressant avant d'afficher le message.

class CustomError < StandardError

  def initialize(error_code, error_info)
    @code, @info = error_code, error_info
  end

  def message
    "<Code: #{@code}> <Info: #{@info}>"
  end

end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X