導入
インスタンス変数 @name は、そのままでは外部から直接読み書きできません。外から読み書きしたいときのために attr_accessor などの便利な仕組みが用意されています。
説明
class Dog
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def introduce
"私は#{@name}、#{@age}歳です"
end
end
pochi = Dog.new("ポチ", 3)
puts pochi.introduce
puts pochi.name
pochi.age = 4
puts pochi.age
attr_accessor :name, :ageを書くと、@name・@ageを読み書きするためのname/name=・age/age=メソッドが自動的に作られます。- 読み取り専用にしたいときは
attr_reader、書き込み専用にしたいときはattr_writerを使います。 pochi.age = 4のように、メソッド名 = 値の形で呼び出すと、@ageの値が書き換わります。
これによって、クラスの外から pochi.name や pochi.age = 4 のように、まるで普通の変数のように扱えるようになります。
やってみよう
attr_accessor を attr_reader に変えて、pochi.age = 4 がエラーになる(書き込みできなくなる)ことを確認してみましょう(コメントアウトして試すのもよいです)。
演習
Book クラスを定義し、attr_accessor :title を使って initialize(title) で @title を設定してください。Book.new("Ruby入門") を作り、.title を puts で表示してください。
ヒント1を見る
class Book attr_accessor :title def initialize(title) @title = title end end のように書きます。
ヒント2を見る
puts Book.new("Ruby入門").title のように続けて書けます。