アクセッサーメソッドとは
Rubyではデフォルトだとインスタンス変数にアクセスできないように設定されています。
下記がその例です。
class Foo
@foo = ''
end
foo = Foo.new
foo.foo = 'foo'
puts foo.foo #=> NoMethodError
ではインスタンスからインスタンス変数にアクセスするには、アクセッサーメソッドを定義する必要がある。
アクセッサーメソッドには2種類あります。
attr_reader
インスタンス変数にアクセスするためのゲッター(読み取り)としての役割を持つ。
class Foo
attr_reader :foo
def initialize(word)
@foo = word
end
end
foo = Foo.new('foo')
puts foo.foo #=> "foo"
attr_writer
インスタンス変数にアクセスするためのセッター(書き込み)としての役割を持つ。
class Foo
attr_reader :foo
attr_writer :foo
def initialize(word)
@foo = word
end
end
foo = Foo.new('foo')
puts foo.foo #=> "foo"
foo.foo = 'bar'
puts foo.foo #=> "bar"
アクセッサーメソッドを定義するメソッド
attr_accessor
ゲッターとセッターの両方の性質を併せ持つメソッド。
class Foo
attr_accessor :foo
def initialize(word)
@foo = word
end
end
foo = Foo.new('foo')
puts foo.foo #=> "foo"
foo.foo = 'bar'
puts foo.foo #=> "bar"
まとめ
デフォルトでは、インスタンスからインスタンス変数へのアクセスが出来ないRubyではアクセッサーメソッドを利用する、といったことが分かれば良いかと思います!