2014-09-30 48 views
-1

我試圖訪問一個類的實例變量在另一個類的時候,但我得到:獲取未定義的方法爲無:NilClass嘗試接取一個實例varible

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

這是我真的使用變量:

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'語句。寫一個好問題的一部分是你必須包含「重現它所需的最短代碼」,「它」是你所問的問題。 – 2014-09-30 15:53:51

回答

3

你定義這個變種:@temp_loaction = Point.new(0, 0)

,然後訪問它作爲@temp_location(注意錯字)

1

查看錯誤信息。它說NilClass沒有方法x_coordinate。這意味着x_coordinate,@temp_location的接收者是NilClass的實例,其爲nil。所以你應該問,「爲什麼@temp_location等於nil?」。看看你最近爲該變量分配了一個值。答對了!由於拼寫錯誤,您從未爲其分配任何值。當一個變量等於nil,但不應該,通常是因爲它從來沒有被初始化,出於某種原因。

相關問題