0

我正在使用 ruby​​ 1.9.3 并从文本文件中读取一个数字

or_rating = line.scan((/\d+/)).map(&:to_i)

然后我读了另一个号码

offrating = line.scan((/\d+/)).map(&:to_i)

然后尝试做一个比较

if offrating - 1 <= or_rating then...

但我得到这个错误

can't convert Fixnum into Array (TypeError)

我找到的大多数答案都是指to_i我尝试过的映射(上图),但我无法让它工作。

4

3 回答 3

2

offrating是一个数组,or_rating也是另一个数组。

而你正在尝试做

Array - FixNum <= Array

所以你得到错误,因为它试图转换 1(FixNum) 以及Array-和比较

如果您期望offratingor_rating始终返回单个元素数组,那么您可以这样做,

offrating[0] - 1 <= or_rating[0]
于 2013-06-09T05:21:30.087 回答
0

tcshao 和 JSWorld 所说的 - 你从表达式中得到一个数组 - 字符串中的数字数组。看起来你想要:

line.scan(/\d+/).map(&:to_i).each_slice(2).select{ |or_rating, offrating| 
  offrating - 1 <= or_rating
}.each{ |or_rating, offrating|
  puts "Your Code Here"
}

或者您可以if在块中使用 an 而不是select.

于 2013-06-09T08:00:36.500 回答
0

scan返回一个数组。您遇到的问题是offrating - 1零件。

它试图从 a 中减去数字 1 Array。如果您添加索引器,就像这样

if offrating[0] - 1 <= or_rating[0]

它可能会消除错误,但我不知道这是否会给您带来您期望的结果。

于 2013-06-09T05:24:36.260 回答