2015-01-05 36 views
0

類方法itearted我有以下紅寶石代碼當一個類變量被設置爲nil爲什麼在使用Ruby

class Myown 
    attr_reader :num 
    def initialize(num) 
    @num = num 
    end 

    def square_num 
    sum = 0 
    until (num == 0) do 
     sum += num**2 
     num -= 1 
    end 
    sum 
    end 

    def difference 
    square_num - num 
    end 
end 


Myown.new(3).difference 

它會引發錯誤 「未定義的方法` - 爲零」:NilClass」在square_sum方法。

任何人都可以解釋爲什麼會發生這種情況。

在此先感謝

+1

你的意思是在'square_num'使用'@ num',而不是'num' ,以及在'差異' –

回答

3

相反的:

num -= 1 

你必須做到:

@num -= 1 

因爲Ruby會認爲你只是試圖訪問一個局部變量。

另一種選擇是使用訪問器。所以,你必須改變:

attr_reader :num 

到:

attr_accessor :num 

然後執行:

self.num -= 1 
+0

嗨@Agis, 感謝您的答案。我將num改爲「@num」,現在square_sum方法可以工作,但是在差異方法中,「@num」的值變爲0,並且它正在返回14而不是11。 – Sai

相關問題