5.4 オブジェクトのインスタンス変数を外から参照できますか
直接はできません。あらかじめそのオブジェクトにインスタンス変数を参照するためのメソッド (アクセサと言います) を定義しておく必要があります。たとえば以下のようにします。
class C
def name
@name
end
def name=(str) # name の後に空白を入れてはいけない!
@name = str
end
end
c = C.new
c.name = ‘やまだたろう’
p c.name #=> “やまだたろう”
またこのような単純なメソッド定義は Module#attr、attr_reader、 attr_writer、attr_accessor などを使って簡潔に行うことができます。たとえば上にあったクラス定義は以下のように書き直せます。
class C
attr_accessor :name
end
なんらかの理由でアクセスメソッドは作りたくないけれど参照はしたい場合は Object#instance_eval を使って参照することもできます。