chromatic's recent blog Mam ciekawy temat podprocedury Moose has
. Patrzyłem na kod źródłowy Moose i zauważyłem, że wewnątrz podprogramu jest zmienna $meta
rozpakowana z . Skąd pochodzi $meta
? Zacząłem brnąć przez różne moduły Moose i Class :: MOP. W wielu podprogramach wydaje się, że $meta
jest powszechnie uznawany za pierwszy argument w @_
, mimo że nie jest on specjalnie przekazywany do niego jako argumentu.W podprogramach Moose, jak meta dostaje się do @_?
Edycja: Oto oryginalny kod źródłowy dla has
podprogramu:
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 Świetny przykład. Dzięki. –