Me gusta la respuesta de Myron, pero sufre la enfermedad de Ruby de "Ya no uso Java / C #, así que nunca volveré a usar la herencia" . Abrir cualquier clase puede estar lleno de peligros y debe usarse con moderación, especialmente cuando es parte de la biblioteca principal de Ruby. No digo que nunca lo use, pero generalmente es fácil de evitar y que hay mejores opciones disponibles, por ejemplo
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
Luego, cuando desee usar una cadena que podría ser un número, está claro lo que está haciendo y no golpea ninguna clase central, por ejemplo
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.
Puede agregar todo tipo de otras comprobaciones en la inicialización, como verificar números binarios, etc. Sin embargo, lo principal es que Ruby es para las personas y ser para las personas significa claridad . Nombrar un objeto a través de su nombre de variable y su nombre de clase hace las cosas mucho más claras.
^
y$
tienen significados sutilmente diferentes como metacars que en la mayoría de los otros sabores regexp. Probablemente quieras usar\A
y en su\Z
lugar.