2010-10-20 38 views
2

我正在使用Moose编写一个对象模块。如何在Moose对象初始化后创建结构?

我现在有几个必填项:

has ['length'] => (
    is  => 'ro', 
    isa  => 'Int', 
    required => 1, 
); 

has ['is_verified'] => (
    is  => 'ro', 
    isa  => 'Bool', 
    required => 1, 
); 

has ['url'] => (
    is  => 'ro', 
    isa  => 'Str', 
    required => 1, 
); 

对象是使用这些字段初始化之后,我想创造一些结构,从对象的方法使用它。

我该怎么做?

+0

什么是使用数组参考单个属性名称?只要写'has url => ...' – 2010-10-20 14:00:33

+0

@Dave Rolsky你是对的。其中一些最初有多个具有相同参数的属性 – 2010-10-20 15:03:53

回答

4

有(至少)两种可能性:

  1. 您可以创建一个BUILD子。它在对象初始化后自动调用。

  2. 您创建了一个普通属性并将其标记为“懒惰”。然后您提供一个创建此属性的子文件:builderdefault。您可以在manual中阅读更多关于此的信息。

+0

+1谢谢。为了澄清,'BUILD'在这里被记录:http://search.cpan.org/~drolsky/Moose-1.17/lib/Moose/Manual/Construction.pod。现在,我应该在哪里“放置”我的结构(比如说subref)?我应该为其定义另一个“有”并将其标记为不需要吗? – 2010-10-20 10:08:44

+1

我会创建另一个属性('has'),使其不是必需的和只读的。如果你使用1.,你可以给它一个私人作家(用下划线作为第一个字符)写在'BUILD'里面。如果你使用2.,你只需要构建器/默认返回所需的值。 – musiKk 2010-10-20 10:16:01