/ / String na integer explicitnú konverziu - rubín

String na integer explicitnú konverziu - rubín

Mám nasledujúci kód:

gets().to_i

Pri vstupe "A", "a", "world", alebo čokoľvek a previesť na celé číslo pomocou to_i, Dostávam 0 vrátený. Môže niekto vysvetliť, čo sa tu deje a prečo to vidím 0 Vždy?

odpovede:

2 pre odpoveď č. 1

To je preto, že reťazec prevedený na celé číslo sa vracia 0 alebo celé číslo, ak reťazec začína číslicami.

➜  ~  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

Ako sa snažíte konvertovať A, a, world na integer (čo nedáva zmysel), dostanete 0.

Mali by ste skontrolovať, či vstup je celé číslo, predtým, než sa pokúsite ho preniesť na celé číslo. Môžete použiť buď regulárny výraz, alebo Integer metóda, ktorá sa zvýši, ak vstup nie je celé číslo.

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 pre odpoveď č. 2

Na úradnú dokumentáciu na to je dobre napísaný.


0 pre odpoveď č. 3

V skutočnosti to, čo popisujú nemôžu byť reprodukované. Vo všetkých konkrétne príklady dal, String#to_i skutočne vráti 0, ale to neznamená, že ho vráti 0 pre ľubovoľný reťazec. Po prvé, to_i vidí, ak na začiatku reťazca môžu byť interpretované ako celé číslo.V takom prípade vráti že integer. Ak nie, vráti sa 0.