Атрибут 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);
}
Другие вопросы по тегам