2014-02-06 65 views
3

我試圖迭代Moose對象的屬性,打印屬性的值而不調用任何惰性構建器(儘管在屬性值存在時打印)。Moose屬性存在

到目前爲止我的代碼看起來像:

for my $attr ($object->meta->get_all_attributes) { 
    my $name = $attr->name; 

    # Lazy attributes that have not already been generated will not 
    # exist in the object hash. 
    next unless exists $object->{$name} 

    my $value = $object->$name; 
    print $value; 
} 

有檢查使用駝鹿的對象,如果存在的屬性值,無需修改穆斯類本身會告訴我的方法嗎?

即一個更優雅的替代代碼「下,除非存在」線以上

感謝所有幫助和考慮:)

回答

3

Moose::Meta::Class文檔將指向你Class::MOP::ClassClass::MOP::Attribute

然後,您可以編寫代碼是這樣的:

foreach my $attr ($object->meta->get_all_attributes) { 
    my $name = $attr->name; 

    next unless $attr->has_value($object); 

    # Or, perhaps get_value(), depending on your requirements. 
    say $attr->get_raw_value($object); 
} 
相關問題