Атрибут 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;
}
Есть ли способ проверки объекта с помощью Moose, который скажет мне, существует ли значение атрибута, без изменения самого класса Moose?
то есть более элегантная альтернатива строке "следующий, если не существует" в приведенном выше коде
Спасибо за любую помощь и внимание:)
1 ответ
Чтение документации Moose::Meta::Class покажет вам Class::MOP::Class и Class:: 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);
}