chromatic の最近のブログで Moose サブルーチンに興味を持ちましたhas
。has
Moose のソース コードを調べていたところ、サブルーチン内に$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;
}