0

実行時に新しいクラスを作成する必要があるパラメーター化されたロール内にメソッドを定義し、Moose::Meta::Class->create その正確なパラメーター化されたロールをそれに適用します。を使用してその役割の新しいメソッドも作成しています

$new_class->meta->add_method( some_name => sub {
 my ($self) = @_;
 ...
})

sub {...} の内部で、コンシューマ クラスのメソッドにアクセスして何かに使用したいのですが、 を使用しようとし$self->get_methodましたが、うまくいきませんでした。

$self上記のサブの内部はMooseX::Role::Parameterized::Meta::Role::Parameterizable

これを行う場合、別の質問もあります。

my $object = Moose::Meta::Class->create(
       "some_type",

);

なぜ$objectsome_type型ではなく、それは醜いの MooseX::Role::Parameterized::Meta::Role::Parameterizableですか?

4

3 に答える 3

0

ここで何をしようとしているのかよくわかりません。あなたが持っているとしましょう

my $new_class = Moose::Meta::Class->create('FooBar');

then$new_class のメタ オブジェクトですFooBar。したがって、メソッドを追加したい場合は、次のFooBarように言うでしょう

$new_class->add_method(foo => sub { … });

これは基本的に同じです

FooBar->meta->add_method(foo => sub { … });

おそらくMoose::Utilfind_meta()からも使用する必要があります。これにより、クラスにメソッドがない場合や別の目的で使用されている場合でも、正しいメタ オブジェクトが返されます (存在する場合) 。meta

前述のとおり、これがあなたの質問に答えているかどうかはわかりません。

于 2010-03-24T20:19:03.890 に答える
0

あなたの根底にある問題は、この質問で説明したものとほぼ同じようです。ロール定義内から、ロールが適用されているオブジェクトまたはクラスのクラス (およびそのメタクラス) を取得する必要があります。これは通常のロール内からはできませんが、パラメーター化されたロールを介して可能です。

于 2010-03-10T17:26:04.797 に答える