【问题标题】:How can I access Moose attributes from class methods?如何从类方法访问 Moose 属性?
【发布时间】:2011-04-13 02:19:06
【问题描述】:

考虑以下代码:

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

【问题讨论】:

  • 您能解释一下为什么您希望类方法拥有它可以访问的属性吗?你到底想完成什么?
  • 一个person类有一个'find'类方法,它使用'table'属性来知道要查询哪个数据库?
  • 如果您希望表属性对于一个调用查找来说是一回事,而对于另一个调用查找是不同的,那么您如何控制它?

标签: perl oop moose


【解决方案1】:

不能。您必须实例化一个 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 了解您的类属性,并自动添加元内省优点。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2015-04-25
    • 2021-11-16
    相关资源
    最近更新 更多