为什么to_i方法在不同情况下导致不同的o / p?

时间:2014-11-11 12:56:14

标签: ruby

下面是我在ruby控制台中尝试的代码。任何人都可以告诉我为什么在这两种情况下输出相同的输出是不同的。

2.1.4 :014 > def a_method
2.1.4 :015?>   puts "enter"
2.1.4 :016?>   a = gets.chomp
2.1.4 :018?>   puts a
2.1.4 :019?>   puts a.to_i
2.1.4 :020?>   end
 => :a_method
2.1.4 :021 > a_method
enter
"12"
"12"
0 (output of a.to_i)
 => nil 

2.1.4 :022 > "12".to_i
 => 12

这里我只是通过使用gets从控制台读取来将字符串数转换为整数,它将0作为输出。如果我只是通过给出" 12" .to_i来做同样的事情,那么我就得到了正确的输出。那是为什么?

2 个答案:

答案 0 :(得分:2)

输入a(带引号)

时,检查中间变量"12"
a = gets.chomp 
# a => "\"12\""
a.to_i # => 0
"\"12\"".to_i # => 0

如果您想输入实际数字,而不是字符串表示,请不要使用引号。

答案 1 :(得分:1)

此输出可能有助于解释此问题:

2.1.1 :001 > def a_method
2.1.1 :002?>   puts "enter"
2.1.1 :003?>   a = gets.chomp
2.1.1 :004?>   puts a.class.name
2.1.1 :005?>   puts a
2.1.1 :006?>   puts a.to_i
2.1.1 :007?>   end
 => :a_method 
2.1.1 :008 > a_method
enter
"12"
String
"12"
0
 => nil 
2.1.1 :009 > a_method
enter
12
String
12
12
 => nil 

gets是获取字符串的缩写,因此如果您输入12,则会将其转换为"12"。正如JiříPospíšil指出的那样,如果你输入"12",它就会变成"\"12\""to_i无法理解。

相关问题