2015-10-25 3 views
0

Так я пишу эту игру в рубине, и у меня есть эта фикция:рубин ошибка: NoMethodError: неопределенный метод `SpecificVisibleTreasures' для ноля: NilClass

puts "Monsters that make you loose a hand-weapon" 
    for m in monsters 
    specificTreasures = Array.new 
    specificTreasures = m.bc.SpecificVisibleTreasures + m.bc.specificHiddenTreasures 
    for treasure in specificTreasures 
     if (treasure == TreasureKind::ONEHAND) 
     puts m.to_s 
     break 
     end 
    end 
    end 

Ъса„badconsequence“и указует на Bc класс "монстр", который имеет это:

def initialize(name, level, prize, bc) 
    @name = name 
    #@combatLevel = level 
    @level=level 
    @prize = prize 
    @badConsequence = bc 
    end 

и класс badconsequence:

def initialize(aText, someLevels, someVisibleTreasures, someHiddenTreasures, someSpecificVisibleTreasures, someSpecificHiddenTreasures, death) 
    @text = aText 
    @levels = someLevels 
    @nVisibleTreasures = someVisibleTreasures 
    @nHiddenTreasures = someHiddenTreasures 
    @SpecificVisibleTreasures = someSpecificVisibleTreasures 
    @SpecificHiddenTreasures = someSpecificHiddenTreasures 
    @death = death 
    end 

, но это дает мне т его ошибка: NoMethodError: undefined method `SpecificVisibleTreasures 'для nil: NilClass

помогите пожалуйста?

+0

Невозможно воспроизвести это из этих битов кода. Но проблема в том, что 'm.bc' как-то ничто. Узнайте, почему. –

+0

@ Сергио Туленцев спасибо, да, я знаю, что не могу поместить весь код, потому что он огромен, но этот код влияет только на те части, которые я написал выше. Почему это не работает, это то, что я пытаюсь обнаружить. – Paula

+0

Ну, не ставьте * все * кода. Уменьшите его до ** минимального ** примера, который ** все еще работает ** и показывает проблему. Вероятно, вы обнаружите проблему в этом процессе. –

ответ

0

Хорошо, ребята, спасибо всем, я уже исправил его. это было в одном из классов а attr_accessor и я изменил основной используя другой тип цикла:

monsters.each do |monstruo| 

....

так да вот, он теперь работает.