Me gusta la respuesta de Myron pero sufre de la enfermedad de Ruby de "Ya no uso Java/C#, así que nunca volveré a utilizar la herencia". Abrir cualquier clase puede ser peligroso y se debe usar con moderación, especialmente cuando es parte de la biblioteca principal de Ruby. No estoy diciendo que nunca lo use, pero por lo general es fácil de evitar y que hay mejores opciones disponibles, p.
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 se desea utilizar una cadena que podría ser un número que está claro lo que está haciendo y no Clobber cualquier clase principal, 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.
Usted puede agregar todo tipo de otros controles en el inicialización, como la comprobación de números binarios, etc. Lo más importante sin embargo, es que Ruby es para las personas y el bienestar de las personas significa claridad. Nombrar un objeto a través de su nombre de variable y su nombre de clase hace que las cosas sean mucho más claras.
safety third !!! – jsh