attr_accessor 是什麼?

在介紹 Ruby 的 Attr_accessor 之前,先稍稍瞭解一下 Ruby 是什麼。

Ruby 是 OOP 導向的直譯式腳本語言(interpreted scripting language)
不需要宣告變數、變數不需要型別,跟其他語言相比也省略了許多東西。
簡單來說,Ruby 的精髓就是簡單易用。


Attr_accessor 為什麼出現?

這裏要先提 Ruby 的兩個眉角。

  1. Ruby 在使用方法時,可以省略括號。
  2. Ruby 沒有屬性(Property / Attribute),只有方法(Method)。
    雖然我們常用 Coke.price 來獲取屬性,但其實是 Ruby 在背後執行了 Coke.price()的方法。

假如像其他語言,設定屬性:

Class Beverage

def initialize(price)
@price = price
end
end

以為 coke = Beverage.new(35), coke.price 就會是 35 嗎?答案是不行。

所以在 Ruby Class 中,要設定跟獲取屬性,必須得用以下的方式:

Class Beverage
  //// coke = Beverage.new(price)
def iniitialize(price)
@price = price
end
  //// Getter :: 可以用 coke.price 的方式獲得 price
def price
return @price
end
  //// Setter :: 可以用 coke.price = new_price 的方式來設定新 price
def price=(new_price)
@price = new_price
end
end

但是,如果每次都要這樣寫,太麻煩。


用 Attr_accessor 快速實現 Setter / Getter

Ruby 內建了三種方法來幫助建立 Setter / Getter:

  1. attr_accessor(創造 Setter / Getter)
  2. attr_reader(只有 Getter)
  3. attr_write(只有 Setter)

用法:

Class Beverage
  attr_accessor :price
  def initialize(price)
@price = price
end
end

Show your support

Clapping shows how much you appreciated Ryan’s story.