Rubyのattr_accessorとは何ですか?質問する

Rubyのattr_accessorとは何ですか?質問する

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"

同じように動作します。そして、なんと、@nameperson オブジェクトのインスタンス変数は手動で行ったときと同じように設定され、他のメソッドでも使用できるようになります。

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_writerattr_accessor

おすすめ記事