インスタンス変数とアクセサ

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的な勘違いをしていました。