我有以下一段代碼:字符串到整數的顯式轉換
gets().to_i
當我輸入"A"
,"a"
,"world"
,或任何東西,將其轉換爲使用to_i
整數,我得到0
返回。任何人都可以解釋這裏發生了什麼,爲什麼我總是看到0
?
我有以下一段代碼:字符串到整數的顯式轉換
gets().to_i
當我輸入"A"
,"a"
,"world"
,或任何東西,將其轉換爲使用to_i
整數,我得到0
返回。任何人都可以解釋這裏發生了什麼,爲什麼我總是看到0
?
實際上,你描述的內容不能被複制。在您給出的所有特定示例中,String#to_i
的確返回0
,但這並不意味着它會爲任何字符串返回0
。首先,to_i
看看字符串的開頭是否可以解釋爲一個整數。如果是這樣,它會返回該整數。如果不是,則返回0
。
這是因爲如果字符串以數字開頭,轉換爲整數的字符串將返回0
或整數。
➜ ~ 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
當你正試圖轉換A
,a
,world
到整數(沒有意義),你會得到0
。
在嘗試將其轉換爲整數之前,您應該檢查輸入是否爲整數。您可以使用正則表達式,也可以使用Integer
方法,如果輸入不是整數,則會引發該方法。
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>'
這個official documentation寫得很好。
我想你會在這裏找到你的答案:http://stackoverflow.com/questions/8768865/regarding-to-i-method-of-ruby – Technotronic