關於 實例變數
重點:
- 呼叫類別的
.new方法來建立物件實例時,所有引數都會傳給.initialize方法,用來初始化該實例的狀態。
- 實例變數的名稱會加上
@前綴。
- 在明確設定之前,實例變數的預設值是
nil。
- 實例變數預設是私有的,應該透過取值方法和設定方法來操作。
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- 名稱以
=結尾的方法會被 Ruby 視為設定方法,並允許以「語法糖」的方式使用指定語法,例如Backpack.new("Sven").owner = "Ayah"。
注意owner和=之間的空格,而真正的方法名稱是owner=。
- 可以使用
attr_reader、attr_writer和attr_accessor方法來建立取值方法和設定方法:
-
attr_reader:為列出的符號建立取值方法
-
attr_writer:為列出的符號建立設定方法
-
attr_accessor:為列出的符號建立取值方法和設定方法
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- 為什麼要使用取值方法和設定方法,而不是直接使用實例變數?
- 如果上一個範例有打字上的錯誤(也就是所謂的「typo」,例如
@ownar),它就會默默地失敗,可能在系統中埋下 bug。
- 取值方法和設定方法讓這件事變得明確,一旦打錯字就會拋出錯誤。
參考資料
初始化物件實例
實例變數