如何从类方法中访问Moose属性?

时间:2011-04-13 02:19:06

标签: perl oop moose

请考虑以下代码:

package Test1;
use Moose; 

has 'something' => (
    is => 'rw',
    default => 'BLAH!'
);

sub printSomething {
    my ($self) = @_;
    ## What should I use here to get the value of something?
    print $self->something;
}

package Test2;

Test1->printSomething();

printSomething如何访问something

1 个答案:

答案 0 :(得分:16)

它不能。您必须实例化Test1对象才能构造属性默认值。他们不会在课堂上闲逛。

如果你想在Moose中使用真正的类属性,你可以编写一个关闭某些东西并返回它的方法:

{
    my $class_attr = 'BLAH!';
    sub something { 
        return $class_attr;
    }
}

当然,如果你需要的话,你还需要做更多工作来添加setter和clearers等等。更好的方法是使用MooseX::ClassAttribute,如下所示:

package Test1;

use Moose;
use MooseX::ClassAttribute;

class_has 'something' => ( 
    is       => 'rw',
    default  => 'BLAH!'
);

这样做的好处是可以让Moose知道你的类属性,并自动添加meta-introspection善。