アクセサの定義の仕方

その1

attr_accessor :attr1, :attr2, :attr3# read/write
attr_reader :attr3, :attr4 # read-only
attr_writer :attr5 # write-only

 : を使う宣言式共通の注意事項だが

attr_accessor: attr1

などとするとエラーになるので注意。
 : は先頭の宣言にかかるのではなく各プロパティにかかるので、各プロパティごとに空白を挟まず先頭に : をつけないといけない。
 @ をつけた同名のインスタンス変数に対してのアクセサとなる。
 
その2

# reader
def attr1
  return @attr1
end
# writer
def attr1= (arg)
  @attr1 = arg
end

任意の実装をしたい場合はこちらを使う。
 
毎回忘れるのでメモ。公式ドキュメント読みづらいっす。
参考:
<http://www.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%A5%E1%A5%BD
%A5%C3%A5%C9
>
– Ruby 公式ドキュメント -> FAQ -> 5. メソッド