Rubyのattr_accessorとは何ですか?
Rubyのattr_accessor
を理解するのに苦労しています。誰か説明してくれませんか?
986
3
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 これは厳密には真実ではなく、これを回避するためのいくつかの「テクニック」がありますが、「パブリックインスタンス変数」へのアクセスをサポートする構文はありません。
attr_accessor
はとてもシンプルです。のショートカットになります。
これはオブジェクトのゲッター/セッターに過ぎません。
基本的には、Rubyが持っていない一般にアクセス可能なデータ属性を偽装しています。