オブジェクトの外側からインスタンス変数を直接参照や代入することはできないので、
そのようなことをするためには、専用のメソッドを定義しなきゃいけない。
例えば、
class HelloWorld
def name
return @name
end
def name=(value)
@name = value
end
end
b = HelloWorld.new()
b.name=('Bob')
puts b.name
まず、bという名前でHelloWorldクラスのオブジェクトが生成(new)される。
name=(value)メソッドを呼び出して、Bobが@nameに格納され、
nameメソッドを呼び出して@nameがreturnされ、putsで出力される。
(@nameはインスタンス変数)
つまり、結果:Bob、となる。
しかしこれだとインスタンス変数を参照・変更するために
このようなメソッドを定義しなければならないし、非常に面倒。
そこでRubyにはこれを自動でやってくれる便利メソッドがある。
それを用いると以下のように書き換えられる。
class HelloWorld
attr_accessor :name
end
b = HelloWorld.new()
b.name=('Bob')
puts b.name
ここでの、attr_accessor :name、がそれにあたる。アクセサメソッド。
アクセサメソッドを宣言し、:name のようにメソッド名を表すシンボルを指定するだけ。
ちなみに、アクセサメソッドには3種類あって、
attr_reader :name
attr_writer :name
attr_accessor :name
上から「参照のみ」・「変更のみ」・「参照と変更」をそれぞれ可能にする。
まだしっくりこない気もするけど、使ってみれば便利メソッドであることがわかる。
