インスタンス変数とアクセサ
attr_readerで、インスタンス変数を読むメソッドが自動的に定義されます。attr_accessorでインスタンス変数へ代入するメソッドも定義されます。
class Person def initialize(name, mail) @name, @mail = name, mail end end alice = Person.new("Alice", "alice@example.com") p alice #=> #<Person:0x2946808 @name="Alice", @mail="alice@example.com"> # p alice.mail #=> undefined method `mail' class Person attr_reader :name, :mail end p alice.mail #=> "alice@example.com" # alice.mail = "alice@example.org" #=> undefined method `mail=' class Person attr_accessor :name, :mail end alice.mail = "alice@example.org" p alice #=> #<Person:0x2946808 @name="Alice", @mail="alice@example.org">
追記:
omochistさんからコメントをいただきましたが、attr_writerを忘れているわけではないんです…。attr_readerと書いておけば(私が)attr_writerは思い出せるので…。
――と、ここまで書いて思ったのですが、attr_writerを使うことってあまりないような気がしてきました。どうでしょうね。
追記:
to_sは無意味だったので、削除。pではto_sメソッドが呼ばれるのだとJava的な勘違いをしていました。