2010-10-20 51 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