特に魔法の照準器ではなく、真の魔法を使用している場合は、これに対して警告したいと思います。
私のアドバイスは簡単です-タスク用のツールを選択して、正しく評価してください。
たとえば、毎回書くのが嫌な場合は、MooseやMouseを使用しないでください。
my $self = bless({}, ref $invocant || $invocant);
。
顕微鏡で釘を打ちます。
Perlはオブジェクト指向スタイルのプログラミングに関して驚くほど便利ですが、全体的なキャッチは、これが明白ではないということです。
samathaを達成するために必要なことは、typeglobに関する章を数回注意深く読み直すことだけです。
または、 Botoxパッケージを使用します。
パッケージはわいせつです。 クラスプロパティを独自の(クラス)名前空間に導入し、クロージャーで「キャンディ」をラップします。 出来上がり!
はい、それは魔法ではありません-それは単なる巧妙なトリックですが、違いは何ですか? それは本当に機能し、うまく機能します( 著者の注意-彼が両方の点で正しいことを願っています)。
クラスは次のように作成されます。
{{{package Parent;
use Botox qw(new prepare set_multi AUTOLOAD); # now you KNOW how mach is it cost.
my $object = new Parent(qw(name adress_rw surname_ro));
1;
}}}
オブジェクトのインスタンスは次のように作成されます。
{{{package Child;
my $foo = new Parent;
$foo->set_multi(name=>'Dolly',adress=>'Scotland, Newerland');
}}}
Botoxを使用すると、クラス作成コードを複製する必要がなくなるだけでなく、ご覧のとおり、非常に便利なものがいくつか追加されます。
1.実際に私たちが持っているプロパティはメソッドになっているので(奇妙ですが、それでも)-それらは継承されます。 実際、継承ツリーでは、左上の親が左下に優先し、左下が右に配置されていることを思い出してください。 家族は、遠い親aboveの上の第7世代でも特に近づいています。
2.プロパティはすでに奇妙なので、誰もそれをさらに奇妙にすることを禁止しません。たとえば、オブジェクトインスタンスから書き込み許可フラグを設定する機会を与えます。 (アクセサを介して、またはクラスコードでのより巧妙な操作の結果として)直接読み取りおよび間接的に書き込み可能なプロパティを持つことが非常に便利な場合があります。 プロパティの名前に接尾辞「 _ro 」を追加するだけで、オブジェクトのインスタンスからの直接変更からプロパティを閉じます。 接尾辞 ' _rw 'はどこからでも変更できるようにし、デフォルト値です。 あなたはそれを自由に書いたり書いたりすることはできません、そして私はどちらがより正しいかをあなたに話すつもりはありません。 奇妙な状況の組み合わせで、私の接尾辞がクラスプロパティを指定するお気に入りの方法と交差する場合は、お知らせください。 このような構文にインスパイアされたものを読むのは面白いでしょう:)
3.呼び出しの文字列を書き込まないように、chohがインスタンス値(リマインダ、rwのみ)を初期化する機能に誰も反対しません。 簡単! set_multiメソッドを使用します。 ただし、SLOCで支払いを受けている場合は、プロトタイプからメソッドを削除してください。 とにかく-アセンブラーで書いてください!
ボトックスが役に立つか、もっとエレガントなものを書いてくれたら嬉しいです。