我一直在做一个小项目,我决定尝试使用Method :: Signatures,因为我发现它更整洁.
这是没有使用Method::Signatures它工作,我能够使用包和调用方法.
sub new {
my $self = {};
bless($self);
shift;
$self->{parent} = shift;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这个时,它不起作用:
method new($parent) {
bless {}, $self;
$self->{parent} = $parent;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误说:"当使用严格的引用时,不能使用字符串("PackageName")作为hashref".
方法::签名自动将第一个参数移出参数列表并将其放入$self.当你调用一个像对象的方法时$obj->foo,那$self就是$obj.但是当你调用类方法时Class->method,那$self将是字符串Class.
你$self包含字符串PackageName,因为它应该new用作类方法.然后你PackageName用作参数bless,但扔掉结果!
bless {}, $self;
Run Code Online (Sandbox Code Playgroud)
这会将新的空hashref(the { })保存到包含的包名中$self,然后将结果抛出.然后,$self当它只是一个字符串时,你会尝试使用hashref,这会导致错误.试试这个:
method new($parent) {
my $obj = bless {}, $self;
$obj->{parent} = $parent;
return $obj;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |