我正在创建一个新对象,如下所示:
my $new_obj = new P_module({key => 'abc'});
Run Code Online (Sandbox Code Playgroud)
P_module有一个构造函数,定义如下:
sub new {
my ($pkg, $input) = @_;
my $obj = {};
bless ($obj, ref($pkg)||$pkg);
$obj->{key} = $input->{key};
}
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,由于散列作为参数传递给new,它将表示为2元素数组.所以,pkg应该key而且input应该是abc.那么,如何obj掌握一把钥匙甚至是key什么$input->{key}意思呢?
首先,
my $new_obj = new P_module({ key => 'abc' });
Run Code Online (Sandbox Code Playgroud)
写得更好
my $new_obj = P_module->new({ key => 'abc' });
Run Code Online (Sandbox Code Playgroud)
这是短暂的
my %anon = ( key => 'abc' );
my $new_obj = P_module->new(\%anon);
Run Code Online (Sandbox Code Playgroud)
在进行方法调用时,调用者(左边的内容->)作为第一个参数传递.这意味着$pkg是字符串P_module,并且$input是返回的引用{ key => 'abc' }.
由于$input是对散列的引用,因此从引用的散列中$input->{key}获取带有键的元素key的值.
我怎么写这个:
sub new {
my ($class, %args) = @_;
my $self = bless({}, $class); # If base class.
#my $self = $class->SUPER::new(); # If inheriting.
$self->{key} = $args{$key};
return $self;
}
my $obj = P_module->new( key => 'abc' );
Run Code Online (Sandbox Code Playgroud)
调用者不需要哈希,也没有理由支持$existing_obj->new.它还使用更多标准名称$class和$self.