chromatic 最近的博客让我对 Moose 子程序感到好奇has
。我正在查看 Moose 源代码,并注意到在has
子例程中,有一个$meta
从@_
. 从哪里来$meta
?我已经开始涉足各种 Moose 和 Class::MOP 模块。在许多子例程中,它似乎$meta
通常作为 中的第一个参数@_
,即使它没有专门作为参数传递给它。
编辑:这是has
子例程的原始源代码:
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;
}