Perl,有助于理解类声明代码

时间:2019-02-15 20:09:51

标签: perl

我正在创建一个类,并且试图理解以下代码

sub new {
    my ($class, %ar) = @_;

    return bless \%ar, $class;
}

我正在专门查看代码块中的代码。

my($class, %ar) = @_;

我知道%ar是传递给该类的参数,但我不明白该声明的含义。

有人可以解释该代码的含义和作用吗?

1 个答案:

答案 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的类,其父代或祖父母...)