我正在学习Ruby,最近完成了一项创建目录的任务但是,在代码结束时,会发生以下错误:

table_of_contents2.rb:23:in `<main>': undefined method `ljust' for nil:NilClass (NoMethodError)

我通过在while循环中执行nil来再次检查outline变量是否puts outline,并尝试在整个代码中将outline变量更改为@outline$outline,但错误仍然存在。
完整代码如下:
lineWidth = 40

chapters = ["Chapter 1: Numbers", "Chapter 2: Letters",
          "Chapter 3: Variables"]
pages = ["page 1","page 72","page 118"]

puts "Table of Contents".center lineWidth


outline = []

i = 0

while i < 3
  outline.push(chapters[i])
  outline.push(pages[i])
  i = i + 1
end

j = 0

while j <= outline.length
  puts outline[j].ljust(lineWidth/2) +
  outline[j+1].rjust(lineWidth/2)
  j = j + 2
end

为什么会发生这个错误为什么在代码成功运行之后会发生这种情况?
补遗:我在终端运行代码当我运行代码时,终端内的完整显示如下:
$ ruby table_of_contents2.rb
           Table of Contents
Chapter 1: Numbers                page 1
Chapter 2: Letters               page 72
Chapter 3: Variables            page 118
table_of_contents2.rb:23:in `<main>': undefined method `ljust' for nil:NilClass (NoMethodError)

提前谢谢你的帮助!

最佳答案

编程语言在0开始索引,但是数字值(如数组的长度)只是正常使用。
因此,当被问及数组的长度(.length)时,数组将返回5个项,但数组中最大的索引是4。
在你的情况下,你一直到数组中的最后一个项目(<=),然后尝试访问一个大于现有的索引(你问增量器是否更小)。
<=更改为<,这样当incrementor等于数组大小时也不会这样做:
while j < outline.length
就这样。
0索引,简单但非常快,当思考如何迭代数据时会变得混乱。
Ruby有一些更方便的函数来为您抽象这个参见:

collection.each do |i, element|
   puts i
   puts element
end

关于ruby - nil:NilClass的未定义方法“恰好”(NoMethodError),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44793008/

10-14 06:33