Rubyのインスタンス変数、学び始めたばかりの頃は全然わかっていなかった。
その勘違いをサンプルコードとともにまとめてみた。
【勘違い】 インスタンス変数を参照、変更するにはクラス内部からでもattr-accessorに書かないといけない
class Engineer
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
engineer = Engineer.new('aoki', 34)
p engineer.age
engineer.weight = 35
p engineer.age
実行結果
34
35
ただし、同一クラスの(この場合はEngineerクラスの)インスタンスメソッド内でインスタンス変数の値を使うなら、attr_accessorに記述しなくていい
class Engineer
attr_accessor :name
def initialize(name, age)
@name = name
@age = age
end
def instroduce_myself
"私は#{@name}です。#{@age}歳です"
end
end
engineer = Engineer.new('aoki', 34)
p engineer.instroduce_myself
実行結果
"私はaokiです。34歳です"
そもそも、instroduce_myselfメソッドに限って言えば、attr_accessorに:nameも不要
class Engineer
def initialize(name, age)
@name = name
@age = age
end
def instroduce_myself
"私は#{@name}です。#{@age}歳です"
end
end
engineer = Engineer.new('aoki', 34)
p engineer.instroduce_myself
結論
クラスの外部から使うのでなければ、attr_accessorに定義しなくてもいい。