1. ホーム
  2. ruby

[解決済み] Rubyのattr_accessorとは何ですか?

2022-03-17 17:30:45

質問

理解するのに苦労しています attr_accessor ルビー .
どなたか説明してください。

どのように解決するのですか?

例えば、あるクラス 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つの異なる方法です。前者は リーダー と呼ばれ、後者は ライター . まだライターを作成していなかったので、作成しましょう。

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 は手動で行ったときと同じように設定されるので、他のメソッドで使用することができます。

class Person
  attr_accessor :name

  def greeting
    "Hello #{@name}"
  end
end

person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"

以上です。を理解するために attr_reader , attr_writer および attr_accessor メソッドを実際に生成してくれるのは、他の回答や本、rubyのドキュメントを読んでください。