Usa Integer (stringa)
Si genererà un errore ArgumentError se la stringa non può convertire in un numero intero.
Integer('5abc') #=> ArgumentError: invalid value for Integer(): "5abc"
Integer('5') #=> 5
saresti ancora bisogno del vostro metodo di number_or_nil se si desidera che il comportamento sia che nullo viene restituito quando una stringa non può essere convertito.
def number_or_nil(string)
Integer(string || '')
rescue ArgumentError
nil
end
Si dovrebbe fare attenzione a salvare da una particolare eccezione. Un salvataggio nullo (come "rescue nil") salverà da qualsiasi errore che erediti da StandardError e potrebbe interferire con l'esecuzione del programma in modi che non ti aspetti. Integer() genererà un ArgumentError, quindi specificalo.
Se si preferisce non trattare con le eccezioni e solo preferisce una versione più breve del vostro number_or_nil è possibile usufruire dei valori di ritorno impliciti e scrivere come:
def number_or_nil(string)
num = string.to_i
num if num.to_s == string
end
number_or_nil '5' #=> 5
number_or_nil '5abc' #=> nil
Ciò funzionerà nel modo previsto.
fonte
2014-07-27 11:50:00
''5'' deve essere '5' o' nil'? –
La domanda non è chiara. Cosa c'è di sbagliato in 'to_i'? Cos'è "questa conversione"? – sawa
nil è quello che mi aspetterei, anche se probabilmente posso vivere con 5. –