2

別のクラス 'Cis' によって作成されたオブジェクトを格納する Gene という Perl のコンテナー クラスを作成しようとしています (たとえば、Gene1 は Cis1a Cis1b Cis1c を格納し、Gene2 は Cis2a Cis2b Cis2c を格納します)。これは私がこれまでに持っているものです:

package Gene;

use Moose;

has 'bindingsites'=>(
isa=>'ArrayRef[Cis]',
is=>'rw',
default=>sub{[]},


package Cis;
use Moose;

has 'gene'=>(isa=>'Gene', is=>'rw', weak_ref =>1);

私はMoose Recipesの 1 つを見て、それを使おうとしていましたが、それが私が探しているものかどうかは完全にはわかりません. それを使用して、Gene クラスのようなものを書きました。

 sub Build{
 my(&self,$params)=@_;
 foreach my $bindingsite(@{$self->bindingsites}){
   $gene->bindingsite($self)}}

しかし、それが私がする必要があることであり、各 Gene クラスがどの Cis オブジェクトを保存するかをどのように知るかはわかりません。

助けてくれてありがとう

4

1 に答える 1

0

Cis オブジェクトが Gene クラスのバインディング サイトに追加されたときに遺伝子属性を自動的に更新する場合は、Gene クラスで「after」メソッド修飾子を使用できます。

after 'bindingsites' => sub {
    my $self = shift;
    my $bindingsites = $self->bindingsites;

    $_->gene($self) for @$bindingsites;
};

このサブルーチンは への呼び出しの後に実行され$gene->bindingsites(...)、遺伝子属性を設定する Cis オブジェクトを反復処理します。

于 2011-12-07T14:22:21.630 に答える