Rubyのattr_accessorとは何ですか?

Rubyのattr_accessorを理解するのに苦労しています。誰か説明してくれませんか?

attr_accessorは単なるメソッドです。(リンク先を見れば、どのように動作するかがわかるはずです。生成されたメソッドのペアを見れば、その使い方がチュートリアルでわかるはずです)

トリックは、classはRubyでは定義ではなく(C++やJavaのような言語では「単なる定義」です)、評価する式であるということです。この評価の間に attr_accessor メソッドが呼び出され、現在のクラスが変更されます。暗黙のレシーバーである self.attr_accessor を思い出してください。

attr_accessor`とその仲間たちの必要性は、そうですね。

1.RubyはSmalltalkのように、インスタンス変数をそのオブジェクトのメソッド1の外からアクセスすることを許しません。つまり、Java や Python で一般的な x.y 形式でインスタンス変数にアクセスすることはできません。Rubyではyは常に送信するメッセージ(または「呼び出すべきメソッド」)とみなされます。したがって,attr_* メソッドは,動的に生成されるメソッドを介してインスタンス @variable へのアクセスをプロキシするラッパーを作成します.

2.ボイラープレートが必要

これでちょっとした詳細が明らかになったと思います。ハッピーコーディング。


1 これは厳密には真実ではなく、これを回避するためのいくつかの「テクニック」がありますが、「パブリックインスタンス変数」へのアクセスをサポートする構文はありません。

解説 (2)

attr_accessor はとてもシンプルです。

attr_accessor :foo

のショートカットになります。

def foo=(val)
  @foo = val
end

def foo
  @foo
end

これはオブジェクトのゲッター/セッターに過ぎません。

解説 (2)

基本的には、Rubyが持っていない一般にアクセス可能なデータ属性を偽装しています。

解説 (3)