有時我會看到一個實例變量,定義爲@my_variable
。但是,有時我會看到self.my_variable
。什麼時候使用?Ruby實例變量和方法
回答
實例變量比調用它們的方法更重要。在self.myVariable
中,myVariable
是涉及實例變量@myVariable
的方法,該方法通常由attr_reader
或attr_accessor
定義。
面向對象編程的一個目的是將特定於該實例內的實例的東西封裝起來,並使其從外部不可訪問。這樣,您可以避免不必要的名稱衝突。這對於實例變量是正確的。它們通常是要在實例中處理的參數,不能在實例外使用。
在一個實例中,它的實例變量可以直接引用,因此不需要通過方法調用來引用它們。你應該直接調用變量@myVariable
。
從實例外部,由於上述原因,不能直接引用實例變量。但有時候,你需要參考他們。使用方法myVariable
的目的是從實例外引用實例變量。
實例變量(@variable
)對應於其他語言的私有變量。 self.myvariable
實際上不是一個變量,而是一個方法的調用。同樣,如果您編寫self.myvariable = something
,則實際上是致電self.myvariable=(something)
。這與其他語言中的getter和setter屬性相對應。
class Foo
def initialize
@bar = 42
end
def xyzzy
123
end
def xyzzy=(value)
puts "xyzzy set to #{value}!"
end
end
obj = Foo.new
puts obj.xyzzy # prints: 123
obj.xyzzy = 2 # prints: xyzzy set to 2
puts obj.bar # error: undefined method 'bar'
您可以使用attr_reader
和attr_accessor
自動定義的getter和setter的實例變量。 attr_reader
將只生成一個吸氣劑,而attr_accessor
生成兩者。
class Parrot
attr_accessor :volts
def voom
puts "vooming at #{@volts} volts!"
end
end
polly = Parrot.new
polly.volts = 4000
polly.voom
我不認爲Rubyists是指「屬性」 - 他們傾向於指「屬性」 – 2011-05-18 02:00:15
@Andrew - 做你是指不同的事情? – Brandon 2011-05-18 02:35:04
@Brandon:我想是的,但我會稍後再檢查。 – 2011-05-18 02:38:24
@my_variable
直接指向實例變量,並且(大部分)是從該實例外部不可訪問的。
self.my_variable
使用的存取方法(如用attr_reader
,attr_writer
或attr_accessor
內部定義,這是在情況下,有可能不是命名@my_variable
(如用ActiveRecord模型的情況下的實例變量屬性)或其中內部狀態與公開暴露的內部狀態不同
- 1. Ruby實例方法和變量
- 2. Ruby - 類實例變量getter setter方法
- 3. Ruby實例變量語法
- 4. Ruby實例變量和局部變量
- 5. Ruby中的類實例變量和實例變量
- 6. 目標C:方法和實例變量
- 7. 瞭解類和實例方法變量
- 8. Coffeescript類,方法和實例變量
- 9. delayed_job傳遞實例方法和變量?
- 10. Ruby混合和實例變量
- 11. Rails和Ruby類,實例變量
- 12. Ruby實例變量訪問
- 13. 實例變量在Ruby中
- 14. Ruby:擴展實例變量
- 15. Ruby跟蹤實例變量
- 16. Ruby的實例變量
- 17. Ruby中的實例變量
- 18. Ruby類實例變量與類變量
- 19. Ruby中的類變量實例變量
- 20. 實例變量的實例方法和線程安全
- 21. 呼叫實例方法與類的實例變量 - Ruby on Rails的
- 22. Ruby:自動設置實例變量作爲方法參數?
- 23. 如何獲取綁定到Ruby變量的實例方法?
- 24. Ruby:如何從類方法設置實例變量?
- 25. Ruby如何從另一個方法修改實例變量?
- 26. 在方法Defenition之外定義實例變量(ruby)
- 27. 在類方法中使用實例變量 - Ruby
- 28. Ruby的類變量和實例變量之間的區別
- 29. Pharo 4.0中的類和實例變量和方法的語法
- 30. 實例方法無法讀取類實例變量
在Ruby中,它們通常在'snake_case'中,像'@ my_variable'和'self.my_variable'。 – 2011-05-18 01:50:12
我認爲這個問題以前被問過,但是我不能找到它 – 2011-05-18 01:52:54