/ / Konwersja jawna do liczby całkowitej - ruby

Konwersja jawna do liczby całkowitej - ruby

Mam następujący fragment kodu:

gets().to_i

Kiedy wprowadzam "A", "a", "world"lub cokolwiek i przekonwertuj go na liczbę całkowitą za pomocą to_i, Dostaję 0 zwrócony. Czy ktoś może wyjaśnić, co tu się dzieje i dlaczego widzę? 0 zawsze?

Odpowiedzi:

2 dla odpowiedzi № 1

To dlatego, że łańcuch przekształcony na liczbę całkowitą zwraca 0 lub liczbę całkowitą, jeśli ciąg zaczyna się cyframi.

➜  ~  irb
2.1.5 :001 > "whatever".to_i
=> 0
2.1.5 :002 > "12-whatever".to_i
=> 12
2.1.5 :003 > "whatever-12".to_i
=> 0

Kiedy próbujesz się nawrócić A, a, world do liczby całkowitej (co nie ma sensu), dostaniesz 0.

Powinieneś sprawdzić, czy dane wejściowe są liczbą całkowitą, zanim spróbujesz rzucić je na liczbę całkowitą. Możesz użyć wyrażenia regularnego lub Integer metoda, która zostanie podniesiona, jeśli wejście nie jest liczbą całkowitą.

2.1.5 :004 > Integer(12)
=> 12
2.1.5 :005 > Integer("world")
ArgumentError: invalid value for Integer(): "world"
from (irb):5:in `Integer"
from (irb):5
from /Users/weppos/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>"
2.1.5 :006 > Integer("12-world")
ArgumentError: invalid value for Integer(): "12-world"
from (irb):6:in `Integer"
from (irb):6
from /Users/weppos/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>"

1 dla odpowiedzi nr 2

The oficjalna dokumentacja na ten temat jest dobrze napisany.


0 dla odpowiedzi № 3

W rzeczywistości to, co opisujesz, nie może być powielane. We wszystkich przykładach, które dałeś, String#to_i rzeczywiście wraca 0, ale to nie znaczy, że powraca 0 dla dowolnego ciągu. Pierwszy, to_i widzi, czy początek ciągu znaków można zinterpretować jako liczbę całkowitą. Jeśli tak, zwraca tę liczbę całkowitą. Jeśli nie, to zwraca 0.