Digamos que defino un resumen My :: Object y las implementaciones concretas de roles My :: Object :: TypeA y My :: Object :: TypeB. Por motivos de mantenimiento, me gustaría no tener una tabla codificada que examine el tipo de objeto y aplique roles. Como ejemplo DWIMmy, estoy buscando algo en este sentido en mi :: Objeto:¿Cómo compongo una función Moose existente en una clase en tiempo de ejecución?
has => 'id' (isa => 'Str', required => 1);
sub BUILD {
my $self = shift;
my $type = $self->lookup_type(); ## Returns 'TypeB'
{"My::Object::$type"}->meta->apply($self);
}
Dejando a conseguir un objeto con Mi :: :: Mi papel Objeto :: TypeB aplicado de la siguiente manera:
my $obj = My::Object(id = 'foo')
¿Esto va a hacer lo que quiero o estoy en la pista completamente equivocada?
Editar: He simplificado esto demasiado; No quiero tener que saber el tipo cuando crea una instancia del objeto, quiero que el objeto determine su tipo y aplique los métodos de la función correcta de manera apropiada. He editado mi pregunta para aclarar esto.
No, no lo hice. Era más una pregunta sobre prácticas recomendadas que me aseguraba de haber entendido correctamente la documentación de meta> y que no estaba tomando el camino equivocado. – Oesor
Moose, y Perl en general es muy bueno acerca de ser un lenguaje experimental. Si tiene una pregunta, pruébelo y vea cuáles son los resultados. Si no comprende los resultados * entonces * pregunte ... se ahorrará mucho tiempo esperando que alguien más confirme/niegue su hipótesis. – perigrin