我正在创建一个类,并且试图理解以下代码
sub new {
my ($class, %ar) = @_;
return bless \%ar, $class;
}
我正在专门查看代码块中的代码。
my($class, %ar) = @_;
我知道%ar是传递给该类的参数,但我不明白该声明的含义。
有人可以解释该代码的含义和作用吗?
答案 0 :(得分:4)
@_
包含子例程的参数。如果您致电
my $object = My::Class->new( x => 7, y => 12 );
(这是调用构造函数的最常用方法),子例程My::Class::new
将被调用并带有五个参数:
'My::Class', 'x', 7, 'y', 12
因此$class
将成为'My :: Class',而%ar
将包含两个键,x
的值为7,而y
的值为12
bless然后将对%ar
的引用与该类相关联,即使其成为该类的对象。因此,该对象将是类似
{ x => 7, y => 12 }
祝福My::Class
。
Class->method
语法类似于调用实例方法
$object->proceed($z);
将使用两个自变量proceed
和$object
调用$z
子例程时。子例程来自哪个类取决于$object
被赋予哪个类(即它可能是$object
的类,其父代或祖父母...)