2014-09-30 2 views
-1

Я пытаюсь получить доступ к переменному экземпляру класса в другом классе, но я получаю:Получение неопределенного метода ноля: NilClass при попытке Асесса Экземпляра varible

:in `lies_outside?': undefined method `x_coordinate' for nil:NilClass (NoMethodError) 

Это где I`m с помощью переменная:

class Grid 
    def initialize(size) 
    @size = size 
    @current_Location = Point.new(0, 0) 
    @temp_loaction = Point.new(0, 0) 
    end 

def lies_outside? 
    if @temp_location.x_coordinate < 0 || @temp_location.x_coordinate >= @size 
     return false 
    elsif @temp_location.y_coordinate < 0 || @temp_location.y_coordinate >= @size 
     return false 
    end 
    end 

И это класс, где переменная:

class Point 
    attr_reader :x_coordinate 
    attr_reader :y_coordinate 

    def initialize (x, y) 
    @x_coordinate = x 
    @y_coordinate = y 
    @x = @y = 0 
    end 

Я опустил все другие методы в этих классах и во всех других классах, потому что это назначение, и мне нужна помощь только с этой проблемой.

+0

Важно, чтобы ваш примерный код был, по крайней мере, синтаксически правильным. Как и в Ruby, он даже не запускает его, потому что вы опускаете закрывающие 'end' -программы для ваших классов. Частью написания хорошего вопроса является то, что вы должны включить «кратчайший код, необходимый для его воспроизведения», «это» - проблема, о которой вы просите. –

ответ

3

Вы определяете этот вар: @temp_loaction = Point.new(0, 0)

, а затем к нему доступ, как @temp_location (Обратите внимание на опечатку)

1

Посмотрите на сообщение об ошибке. В нем говорится, что NilClass не имеет метода x_coordinate. Это означает, что приемник x_coordinate, @temp_location является экземпляром NilClass, который является nil. Поэтому вы должны спросить: «Почему @temp_location равен nil?». Посмотрите, где вы в последний раз назначили значение этой переменной. Бинго! Из-за неправильной орфографии вы никогда не назначали ей значение. Когда переменная равна nil, но этого не должно быть, это часто потому, что она никогда не была инициализирована по той или иной причине.

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