簡體   English   中英

perl對象和屬性

[英]perl object and attribute

我試圖基於某些條件(例如,對象的版本)創建perl對象(及其相關屬性),不需要某個屬性(否則無效)。 我如何創建對象,而不必兩次指定對象(每個條件一次)。

my $obj = myobject->new (
attr1 => value1,
attr2 => value2,
attr3 => valuen,
)

例如,我可以定義一個變量並根據條件為其分配不同的值嗎? 像這樣:

my $attribute = (condition)? "":'attr4 => value4';

並像這樣簡單地定義對象:

    my $obj = myobject->new (
    attr1 => value1,
    attr2 => value2,
    attr3 => valuen,
    $attribute,
    )

這顯然會出錯。 但是你明白我的想法。 我該如何工作?

實際上, new的參數只是一個列表,就像任何東西的參數一樣。 您可以使用數組而不是字符串來執行所需的操作。

my @attribute = $condition ? () : (attr4 => value4);

my $obj = MyObject->new(
    attr1 => value1,
    attr2 => value2,
    attr3 => value3,
    @attribute
);

如果順序無關緊要(通常對於構造函數而言無關緊要),您也可以使用哈希-可以使您的代碼變得更好。

我認為我的方法是構建參數的哈希,完成后將其傳遞給構造函數

看起來像這樣。 我將整個內容包裝在一個do塊中,以限制%attr的范圍; 這不是必需的。 當然condition必須是可編譯的Perl表達式

my $obj = do {

    my %attr = (
        attr1 => 'value1',
        attr2 => 'value2',
        attr3 => 'valuen',
    );

    $attr{attr4} = 'value4' if condition;

    MyObject->new(%attr);
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM