to_i 方法不转换字符串

to_i method doesn't convert string

我从一个元素中得到包含总和的文本:

sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text

然后我必须将sum与另一个整数进行比较,但sum仍然是一个字符串:

>> sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
=> "7 671 \u0420"
>> puts sum.class
String
>> sum.gsub!(/[^0-9]/, '')
=> "7671"
>> puts sum.class
String
>> sum.to_i
=> 7671
>> puts sum.class
String

如何将 sum 转换为整数?

您仍然需要将新值分配给 sum:

sum = sum.to_i

您必须以这种方式覆盖结果:

sum = sum.to_i

如果您尝试转换非数字字符串,我建议使用 Integer(sum) 而不是 .to_i 方法来引发异常。

nil.to_i = 0
"".to_i = 0

Integer("") 
ArgumentError: invalid value for Integer(): ""
    from (irb):1:in `Integer'
    from (irb):1
    from /Users/nico/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'

String#to_i returns 一个新对象(这是唯一明智的实现;想一想如果 String#to_i 神奇地改变对象的 class 会发生什么)。

因此,要将整数值分配给您的 sum 变量,请使用

  sum = sum.to_i

或(更好)为您的整数值引入一个新变量:

  sum_as_integer = sum.to_i