3

$self->myfunc() を常に使用することなく、単純な func() 呼び出しだけで、サブクラス全体で使用する基本クラスから単純な関数をエクスポートしたかったのです。

Moose::Exporterの例でこれをやってみました

しかし、私は何を理解していませんでした

as_is     => [ 'sugar3', \&Some::Random::thing ],

例が不完全に見えるため、実行していました。sugar3 はどこにも定義されていないため、どこでどのように使用するかわかりません。サブクラスで sugar3() を呼び出すことはできますか? sugar3() は秘密の Moose のものですか?

そして、それはこのことでした...文字通り

thing;

エクスポートされましたが、例がないため、何をしているのかわかりません。これは関数呼び出しですか?

とにかく、通常は Exporter で行うように関数をエクスポートする方法を説明しますが、代わりに Moose Exporter を使用します。また、ベースクラスの後に 3 レベルの継承がある場合、すべてのサブサブクラスがエクスポートされたものにアクセスできますか?関数?

4

1 に答える 1

3

as_is => [ ... ]:

この関数名またはサブ参照のリストは、AS-ISでエクスポートされます。参照によりサブルーチンを識別できます。これは、参照(\&Some::Package::function)によって他のモジュールの関数を直接再輸出するのに便利です。

sugar3エクスポートするサブの名前です。

はい、sugar3サブクラスをエクスポートした場所であれば、今すぐサブクラスを呼び出すことができます。とはいえ、通常、(定数以外のものを) サブクラスにエクスポートするのは奇妙です。

はい、thing;サブコールです。の下no strict;では、 と同じこともあります'thing';

サブクラスは、メソッドとして呼び出されない限り、サブにアクセスできません (例:$o->thing;の代わりにthing;)。ただし、メソッドをエクスポートするのは非常に奇妙です。クラスにメソッドを与える Moose::Role を作成します。

于 2011-10-14T21:11:39.880 に答える