NoMethodError:nil的未定义方法`+':NilClass

时间:2017-01-25 19:58:59

标签: ruby

我尝试使用谷歌搜索并查看stackoverflow仍然无法弄清楚为什么它不起作用。本质上,这行代码读入file.txt并循环遍历文本文件

上的指令行
# Load instruction in an array
File.open('file.txt').each do |line|
  line_num += 1
  array.to_a.push line.split(" ")
end

# Loop through the array of Instructions
array.each do |line|
  instruction = line[0]
  value = line[1].to_i

这是我得到的错误

NoMethodError: undefined method `+' for nil:NilClass

method block in <main>  in VirtualMemory.rb at line 3
method each in VirtualMemory.rb at line 2
method <main>   in VirtualMemory.rb at line 2

2 个答案:

答案 0 :(得分:3)

您必须初始化变量。

line_num += 1

除非先前定义line_num,否则这将失败,它与line_num = nil + 1基本相同

如果你之前没有定义过array,那么这也会失败,如果你有,那么就没有必要调用to_a

array.to_a.push line.split(" ")

答案 1 :(得分:2)

line_num += 1

相当于

line_num = line_num + 1

由于未定义line_num,因此它是nil - 修复将在打开文件之前将其初始化为0,或者您可以执行以下操作:

array = File.open('file.txt').each.map{ |line| line.split(" ")}