I como a resposta de Myron mas sofre da doença de Ruby de "eu já não usar Java / C # para que eu nunca vou herança uso novamente" . A abertura de qualquer classe pode estar repleta de perigos e deve ser usada com moderação, especialmente quando faz parte da biblioteca principal do Ruby. Não estou dizendo que nunca o use, mas geralmente é fácil evitar e que existem melhores opções disponíveis, por exemplo
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
Então, quando você deseja usar uma string que possa ser um número, fica claro o que você está fazendo e você não derruba nenhuma classe principal, por exemplo,
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.
Você pode adicionar todos os tipos de outras verificações na inicialização, como verificar números binários etc. O principal, porém, é que Ruby é para pessoas e ser para pessoas significa clareza . Nomear um objeto por meio de seu nome de variável e nome de classe torna as coisas muito mais claras.
^
e$
têm significados sutilmente diferentes como metacarpos do que na maioria dos outros sabores de expressões regulares. Você provavelmente pretende usar\A
e em\Z
vez disso.