nil的未定义方法`split':数组的NilClass(NoMethodError)

时间:2014-05-20 10:37:04

标签: ruby file-io

我正在尝试读取包含一些数字的文件。然后我想将它们转换为整数。当我在下面尝试时,没关系。

input = IO.readlines(filename)
size = input[0].split(/\s/).map(&:to_i)

但是,当我在下面尝试时,它会给我这个错误。

input = IO.readlines(filename)
lnth = input.length
i=0
while i<=lnth
  size = input[i].split(/\s/).map(&:to_i)
  i=i+1
end
  

未定义的方法`split'代表nil:NilClass(NoMethodError)

我现在如何解决错误?

4 个答案:

答案 0 :(得分:2)

我想知道这应该做什么?

size = line.split(/\s/).map(&:to_i)

它将分割像“321 123 432”这样的字符串并返回类似[321,123,432]的数组。 此外,变量size在每一轮再次初始化。

忽略这一点,这是一个类似Ruby的版本:

File.readlines(filename).each do |line|
  size = line.split(/\s/).map(&:to_i)
end

在Ruby中,你通常不会使用for i in item_count ..while i<item_count之类的东西,因为我们有像.each这样的枚举器。

答案 1 :(得分:1)

显然while i<lnth不是<=

while i<lnth
  size = input[i].split(/\s/).map(&:to_i)
  i=i+1
end

但最好使用:

size = line.split(/\s/).map(&:to_i)

答案 2 :(得分:0)

在拆分之前将其转换为字符串,即input[i].to_s.split(/\s/)

可能input[i]nil,因此请将其转换为字符串

ref

答案 3 :(得分:0)

这应该这样做:

def nil.split *args
  nil # splitting of nil, in any imaginable way, can only result again in nil
end