J'aime la réponse de Myron mais elle souffre de la maladie de Ruby qui consiste à "Je n'utilise plus Java/C# donc je ne vais plus jamais utiliser l'héritage" . L'ouverture d'une classe peut être dangereuse et doit être utilisée avec parcimonie, notamment lorsqu'il fait partie de la bibliothèque principale de Ruby. Je ne dis pas qu'il ne faut jamais l'utiliser, mais qu'il est généralement facile de l'éviter et qu'il existe de meilleures options disponibles, par exemple
class IntegerInString < String
def initialize( s )
fail ArgumentError, "The string '#{s}' is not an integer in a string, it's just a string." unless s =~ /^\-?[0-9]+$/
super
end
end
Ainsi, lorsque vous souhaitez utiliser une chaîne de caractères qui pourrait être un nombre, vous savez clairement ce que vous faites et vous n'encombrez aucune classe de base, par exemple
n = IntegerInString.new "2"
n.to_i
# => 2
IntegerInString.new "blob"
ArgumentError: The string 'blob' is not an integer in a string, it's just a string.
Vous pouvez ajouter toutes sortes d'autres vérifications dans l'initialisation, comme la vérification des nombres binaires, etc. Mais l'essentiel, c'est que Ruby est fait pour les gens et être fait pour les gens signifie clarté . Nommer un objet via son nom de variable y son nom de classe rend les choses mucho plus clair.