2013-10-30 112 views
0

我想了解這段代碼。類def方法初始化爲0?

我想將它初始化爲零。 def seconds=(),這是什麼意思?我不得不打電話def seconds來獲得變量。如果我只是把attr_accessor :seconds放在一起,這不一樣嗎?

require 'time' 
class Timer 

    def seconds=(seconds) 
    @second = seconds 
    end 

    def seconds 
    @seconds 
    end 
end 

回答

2

是的,它是一樣的。

attr_accessor :seconds爲您創建了一個實例變量的設置器和獲取器,因此您不必顯式地執行該操作。

此外,您在導入器中錯誤地輸入@second

1

要自動初始化類變量設置爲零,定義它,然後重寫它的讀者方法:

class Timer 
    attr_accessor :seconds 

    def seconds 
    @seconds ||= 0 
    end 
end 
+0

注意,如果他這樣做,他也可能只是做'attr_writer:seconds'然後寫他自己的讀者方法,而不是重寫它。雖然,我想在選擇方面沒有任何性能上的提升(如果有的話,我很樂意聽到它) – David

+1

@David:最好我知道,由於函數的性能影響很小(可以忽略)定義兩次。不管怎樣,我傾向於在使用'attr_accessor'方面犯錯:如果您正在掃描其源的屬性,它會爲類的定義增加清晰度。 –

+0

我的想法也是如此。 – David