在Perl中创建容器类(使用Moose)

时间:2011-12-07 13:34:14

标签: perl moose arrayref

我正在尝试在Perl中创建一个名为Gene的容器类,它将存储由另一个类'Cis'创建的对象(例如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并尝试使用它,但我并不完全确定它是我正在寻找的。使用它我写了类似Gene类:

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

但我不确定这是我需要做什么,以及每个Gene类如何知道要存储哪些Cis对象。

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

如果您希望在将Cis对象添加到Gene类的绑定站时自动更新基因属性,则可以在Gene类中使用'after'方法修饰符,例如。

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

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

此子将在调用$gene->bindingsites(...)后运行,并将迭代设置基因属性的Cis对象。