Rubyattr_accessor
を理解するのに苦労しています。誰か私に説明してくれませんか?
ベストアンサー1
クラスがあるとしますPerson
。
class Person
end
person = Person.new
person.name # => no method error
明らかに、メソッドを定義していませんname
。定義してみましょう。
class Person
def name
@name # simply returning an instance variable @name
end
end
person = Person.new
person.name # => nil
person.name = "Dennis" # => no method error
なるほど、名前を読み取ることはできますが、名前を割り当てることができるわけではありません。これらは 2 つの異なる方法です。前者はreaderと呼ばれ、後者はwriterと呼ばれます。まだ writer を作成していないので、それを作成しましょう。
class Person
def name
@name
end
def name=(str)
@name = str
end
end
person = Person.new
person.name = 'Dennis'
person.name # => "Dennis"
素晴らしい。これで、リーダー メソッドとライター メソッドを使用してインスタンス変数の書き込みと読み取りができるようになりました@name
。ただし、これは頻繁に行われるため、毎回これらのメソッドを記述して時間を無駄にする必要はありません。もっと簡単にできます。
class Person
attr_reader :name
attr_writer :name
end
これでも繰り返しになります。リーダーとライターの両方が必要な場合は、アクセサを使用してください。
class Person
attr_accessor :name
end
person = Person.new
person.name = "Dennis"
person.name # => "Dennis"
同じように動作します。そして、なんと、@name
person オブジェクトのインスタンス変数は手動で行ったときと同じように設定され、他のメソッドでも使用できるようになります。
class Person
attr_accessor :name
def greeting
"Hello #{@name}"
end
end
person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"
以上です。、、メソッドが実際にどのようにメソッドを生成するattr_reader
かを理解するには、他の回答、書籍、Ruby ドキュメントを読んでください。attr_writer
attr_accessor