Korzystanie Integer (string)
będzie podnieść błąd ArgumentError jeśli ciąg nie można przekonwertować na liczbę całkowitą.
Integer('5abc') #=> ArgumentError: invalid value for Integer(): "5abc"
Integer('5') #=> 5
Można by jeszcze trzeba metodę number_or_nil jeśli chcesz zachowanie się, że zero jest zwracany, gdy łańcuch nie mogą być konwertowane.
def number_or_nil(string)
Integer(string || '')
rescue ArgumentError
nil
end
Należy zachować ostrożność, aby uratować od określonego wyjątku. Nagie ratowanie (takie jak "zero ratunkowe") uratuje przed każdym błędem, który dziedziczy po StandardError i może zakłócać wykonanie twojego programu w sposób, jakiego się nie spodziewasz. Integer() spowoduje zgłoszenie ArgumentError, więc należy to określić.
Jeśli raczej nie radzić sobie z wyjątkami i po prostu wolą krótszą wersję swojej number_or_nil można skorzystać z wartości zwracanych ukrytych i zapisać go jako:
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
To będzie działać zgodnie z oczekiwaniami.
'' 5 ''powinno być' 5' lub 'zero'? –
Pytanie nie jest jasne. Co jest nie tak z 'to_i'? Co to jest "ta konwersja"? – sawa
nil jest tym, czego bym się spodziewał, chociaż prawdopodobnie mogę żyć z 5. –