请考虑以下代码:
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
?
答案 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善。