我應該使用哪個,因為我剛剛開始學習 Ruby 進行 Web 開發使用,所以我們應該在下面的示例中使用它:
print "Type your chosen number?"
user_number = Integer(gets.chomp)
或者
print "Type your chosen number?"
user_number = gets.chomp.to_i
uj5u.com熱心網友回復:
這取決于
如果你需要例外——Integer(gets)
如果沒有——gets.to_i或者Integer(gets, exception: false)
在任何情況下你都不需要chomp
Integer("1") # => 1
Integer("1.0") # raise ArgumentError
Integer("blabla") # raise ArgumentError
Integer("blabla", exception: false) # => nil
"1".to_i # => 1
"1.0".to_i # => 1
"blabla".to_i # => 0
uj5u.com熱心網友回復:
一般來說,你應該要求一個物件做某事,而不是對一個物件做某事;物件最清楚。object.do_thing要求物件做某事。do_thing(object)對物件做某事,并假設它最了解。
但是,在這種特定情況下,它們略有不同。主要區別在于,String#to_i如果您嘗試轉換廢話,它將回傳 0。而Kernel#Integer會拋出例外。
# Prints 0
p "not a number".to_i
# (file): invalid value for Integer(): "not a number" (ArgumentError)
p Integer("not a number")
一般來說,您應該更喜歡在失敗時引發例外,這更重要。錯誤輸入時不拋出例外的方法很難找到錯誤,最好快速失敗并盡可能接近實際問題。如果你愿意,你可以捕捉到例外。
uj5u.com熱心網友回復:
我不能告訴你哪種方法會更好。答案在很大程度上取決于許多其他因素。我會添加這個:
除了其他人提到的一些其他事情之外,Integer()還將轉換使用基數指示符的各種其他看似非數值的值,以利用二進制、十六進制和八進制數字系統。這反過來可能會導致潛在的意外結果,甚至可能導致看似有效的數字條目的錯誤。幾個例子:
Integer("0x1a") #=> 26
Integer("0x9f") #=> 159
Integer("0b01") #=> 1
Integer("0b010") #=> 2
Integer("0b011") #=> 3
Integer("0b02") #=> Evaluation Error
Integer("010") #=> 8
Integer("011") #=> 9
Integer("0110") #=> 72
Integer("01100") #=>576
Integer("01101") #=>577
Integer("01") #=> 1
Integer("07") #=> 7
Integer("08") #=> Evaluation Error
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507579.html
標籤:红宝石
下一篇:從嵌套的哈希陣列中獲取值
