chromatic's recent blog tengo curiosidad acerca de la subrutina Moose has
. Estaba mirando el código fuente de Moose y noté que dentro de la subrutina has
, hay una variable $meta
descomprimida desde @_
. ¿De dónde viene $meta
? Empecé a recorrer los distintos módulos Moose and Class :: MOP. En muchas subrutinas, parece que $meta
se encuentra comúnmente como el primer argumento en @_
, aunque no se le pasa específicamente como argumento.
Editar: Aquí está el código fuente original para el has
subrutina:
sub has {
my $meta = shift;
my $name = shift;
Moose->throw_error('Usage: has \'name\' => (key => value, ...)')
if @_ % 2 == 1;
my %options = (definition_context => Moose::Util::_caller_info(), @_);
my $attrs = (ref($name) eq 'ARRAY') ? $name : [ ($name) ];
$meta->add_attribute($_, %options) for @$attrs;
}
+1 Gran ejemplo. Gracias. –