Utilizando __PACKAGE__->meta->get_attribute('foo')
, puede acceder a las definiciones de los atributos foo
en una clase determinada, que pueden ser útiles.Moose (Perl): acceso a las definiciones de atributos en las clases base
#!perl
package Bla;
use Moose;
has bla => is => 'ro', isa => 'Str';
has hui => is => 'ro', isa => 'Str', required => 1;
no Moose; __PACKAGE__->meta->make_immutable;
package Blub;
use Moose;
has bla => is => 'ro', isa => 'Str';
has hui => is => 'ro', isa => 'Str', required => 0;
no Moose; __PACKAGE__->meta->make_immutable;
package Blubbel;
use Moose;
extends 'Blub';
no Moose; __PACKAGE__->meta->make_immutable;
package main;
use Test::More;
use Test::Exception;
my $attr = Bla->meta->get_attribute('hui');
is $attr->is_required, 1;
$attr = Blub->meta->get_attribute('hui');
is $attr->is_required, 0;
$attr = Blubbel->meta->get_attribute('hui');
is $attr, undef;
throws_ok { $attr->is_required }
qr/Can't call method "is_required" on an undefined value/;
diag 'Attribute aus Basisklassen werden hier nicht gefunden.';
done_testing;
Como se desprende de este pequeño ejemplo de código, sin embargo, esto no puede ser utilizado para acceder definiciones de atributos en las clases de base, lo que sería aún más útil para mi caso particular. ¿Hay alguna manera de lograr lo que quiero?
Funciona, fantástico, gracias! :-) – Lumi