Ruby中未定义的方法[]

时间:2015-06-28 08:52:23

标签: ruby function undefined

我在Windows 7 Professional上运行Ruby 2.2.2。我正在尝试制作一个菜单程序,在一个数组中存储多个菜单。我以为我成功了,但是我收到了错误消息

Menu.rb:7:in 'block in load':undefined method '[]' for nil:NilClass (NoMethodError)

这是我的代码:

#-Functions-#
def load(page)
    data = [["menu","Menu",[["obj1","Object 1",false],["exit","Exit",true]]],["obj1","Object 1",[["menu","Back",false],["exit","Exit",true]]],["exit","Exit",false]]
    itemNum = 0
    data.each do
        pageData = data[itemNum]
        if pageData[0] == page      #ErrorLine
            if pageData[2] == false
                send(page)
            else
                system "cls"
                puts
                puts " #{pageData[1]}"
                puts
                itemNum = 1
                pageData[2].each do
                    puts
                    puts "  #{itemNum}. #{pageData[2][itemNum-1][1]}"
                    itemNum += 1
                end
                puts
                puts
                print " Choice: "
                choice = gets.chomp.to_i
                load(pageData[choice-1][0])
            end
        end
        itemNum +=1
    end
end
def exit
    exit
end

#-Program-#
load("menu")

2 个答案:

答案 0 :(得分:1)

您的数据阵列设置有3个元素,但是如果您记录您的程序, 在每个循环结束时尝试这个

data.each do
  ...
  itemNum +=1
  puts "itemNum is now #{itemNum}"
end

运行它,你会发现在某个时刻“itemNum现在是4”。 因此,在第7行,pageData为nil,因为data [4]元素不存在。

答案 1 :(得分:0)

这不是答案,但我没有足够的声誉来评论。

基本上,第7行​​的pageData = data[itemNum]评估为nil。 您收到该错误是因为您正在尝试访问nil的索引,而这是不可能的。

尝试在代码中运行一个值,看看它变成nil的位置,并从那里开始。