這個問題在這里已經有了答案: 為什么 Ruby setter 需要“自我”。班級內的資格? (3 個回答) 16 小時前關閉。
我想了解為什么這不起作用。我知道 attr_accessor 的概念。
class MyClass
attr_accessor :num
def initialize(num = 0)
@num = num
end
def calulate
while num < 100
num = num 1
end
puts num
end
end
c = MyClass.new
c.calulate
這給了我錯誤。
my_class.rb:11:in `calulate': undefined method ` ' for nil:NilClass (NoMethodError)
但是,如果我更改num為@num. 有用。任何人都可以解釋這一點嗎?
uj5u.com熱心網友回復:
問題來自于線路 num = num 1
訪問作品,但要從類內部分配給訪問者,您需要做
self.num = num 1
您第一次運行時所做的num = num 1
是創建一個新變數num并隱藏該方法。
因此,在 while 回圈中,每次訪問num都會參考您的新變數,進行顯式賦值self.num=使 ruby?? 知道您沒有創建新變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411411.html
標籤:
下一篇:從Ruby中的哈希陣列中選擇欄位
