rubyではattr_readerをつけないでインスタンス変数にクラス内部からアクセスするとエラーになります
class User
def initialize(name)
@name = name
end
def get_name
name
end
end
u = User.new('John')
puts u.get_name # undefined local variable or method `name' for an instance of User (NameError)
エラー文を見ると、インスタンス変数として解釈されてないようです
attr_readerをつける
attr_readerをつけると、インスタンス変数として解釈されて、値が返ってきます
class User
attr_reader :name
def initialize(name)
@name = name
end
def get_name
name
end
end
u = User.new('John')
puts u.get_name # John
puts u.name # John # attr_reader宣言でゲッターが定義されているので、これでもインスタンス変数にアクセスできる
インスタンス変数をクラス内部から@で呼び出せば、attr_readerはなくて良い
インスタンス変数をクラス内部から@で呼び出せば、attr_readerはなくて値は返ってきます。
class User
def initialize(name)
@name = name
end
def get_name
@name
end
end
u = User.new('John')
puts u.get_name # John
クラスの外から直接ゲッターメソッドで呼び出しもできないので、なるべくはこちらの方法で定義する方が、カプセル化ができ良いかもしれません