#アクセサとは
定義:インスタンス変数にアクセスするために必要なもの。
前提:Rubyではそのままだとインスタンス変数にアクセスできない。
→外部からの変数書き換え、呼び出しができない。
class User
@name = ""
end
user = User.new
user.name = "taro"
p user.name
#=>rb:6:in `': undefined method `name=' for # (NoMethodError)
→インスタンス変数からの呼び出しを可能にするのがattr_reader(ゲッター)
class Human
attr_reader :name #(ゲッター)
def initialize(name)
@name = name
end
end
human = Human.new("taro")
puts human.name
実行結果
taro
→インスタンス変数を外部から書き換え可能にするのがattr_writer(セッター)
class Human
attr_writer :name #(セッター)
attr_reader :name
def initialize(name)
@name = name
end
end
human = Human.new("taro")
puts human.name
human.name = "siro"
puts human.name
実行結果
taro
siro
→attr_reader(ゲッター)とattr_writer(セッター)の機能を足したのがattr_accessor(アクセサ)
class Human
attr_accessor :name #アクセサ
def initialize(name)
@name = name
end
end
human = Human.new("taro")
puts human.name
human.name = "siro"
puts human.name
実行結果
taro
siro