Ah, buena pregunta!
Will the subclass inherit the use statements from the parent?
Bueno, esto depende de lo que quiere decir heredar. No haré ninguna suposición hasta el final, pero la respuesta es quizás. Usted ve, perl mezcla las ideas de Classes
, y Namespaces
- un package
es un término que puede describir cualquiera de ellos. Ahora el problema es la declaración use
todo lo que hace es forzar la inclusión de un paquete, y llamar a los objetivos import()
sub. Esto significa que, en esencia, tiene un control ilimitado sobre su paquete y, a través de eso, su clase.
Ahora, este compuesto con todos los métodos en Perl no ser más que subs
que tienen $self
como primer argumento, por convención, y uno se queda con perl5. Esto tiene un enorme potencial para aquellos que saben cómo usarlo. Si bien strict es un pragma léxico, ¿qué pasa con Moose
?
package BigMooseUser;
use Moose;
package BabyMooseUser;
our @ISA = 'BigMooseUser';
package Foo;
my $b = BabyMooseUser->new;
print $b->meta->name;
Ahora, ¿de dónde BabyMooseUser
obtener el constructor (nuevo) de la? ¿De dónde salió la metaclase? Todo esto se proporciona desde un solo use Moose;
en la clase principal (espacio de nombres). Así
Will the subclass inherit the use statements from the parent?
Bueno, aquí, en nuestro ejemplo, si los efectos de la declaración uso son agregar métodos, que sin duda.
Este tema es bastante profundo, y depende de si se trata de pragmas, marcos de objetos más oscuros o módulos de procedimientos. Si desea mitigar el espacio de nombres de un padre para que no afecte al propio en el paradigma OO, vea namespace::autoclean
.
Pregunto acerca de esta funcionalidad porque Test :: Most y Moose afirman hacerlo, pero no he descubierto cómo lo hacen. – chotchki
Mire el método de importación() en Test :: Most. Así es como lo hace. Carga manualmente todos esos módulos repetitivos y los exporta a dos niveles. –
¡Gracias por toda la ayuda a todos! El sub de importación fue la clave. (Puedo salvarme el dolor en el futuro y simplemente ir a Moose). – chotchki