2015-06-28 5 views
-1

Я бегу Ruby 2.2.2 на Windows 7 Professional. Я пытаюсь создать программу меню, которая хранит несколько меню в одном массиве. Я подумал, что мне удалось, но я получаю сообщение об ошибкеНеопределенный метод [] в Ruby

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") 
+0

Подсказка: где-то в вашем коде 'itemNum' становится числом больше, чем' 3'. –

+0

Что вы думаете? – sawa

ответ

1

Ваш массив данных установлен с 3-х элементов, однако, если вы войдете программу, попробовать это в конце Вашего каждого цикла

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

запустить его, и вы увидите, что в какой-то момент «itemNum теперь 4 ". Следовательно, на вашей строке 7 pageData равно нулю, поскольку элемент данных [4] не существует.

+0

На самом деле это был не ответ, но он привел меня в правильном направлении! Я использовал itemNum внутри части письма, поэтому я создал новую переменную под названием pageNum и использовал ее в data.each! – JoshyRobot

0

Это не ответ, но у меня не хватает репутации комментировать.

В основном, ваш pageData = data[itemNum] в строке 7 оценивается в nil. Вы получили эту ошибку, потому что пытаетесь получить доступ к индексу nil, которого не может быть.

Попробуйте ввести значение через свой код и посмотреть, где он превращается в nil, и перейти оттуда.

+0

Я ОЧЕНЬ новичок в Ruby, поэтому я не понимаю, что вы подразумеваете под «управлением значением через ваш код и см., Где он превращается в« nil ». – JoshyRobot

+0

Не вещь Ruby. Вручную возьмите значение и, в своей голове, запустите его через свой код, чтобы увидеть, где он становится «nil». – Nemo

Смежные вопросы