1

我在教程中读到了类似调用构造函数的内容:

my $v = Vehicule->new( 2, "bleu" );

那么相关的类就是这样的

sub new {
    my ($class,$nbRoues,$couleur) = @_;
    my $this = {};
    bless($this, $class);
    $this->{NB_ROUES} = $nbRoues;
    $this->{COULEUR} = $couleur;
    return $this;
}

我不明白的是@_第一个元素如何/为什么包含类名?

my ($class,$nbRoues,$couleur) = @_ 

当我们这样称呼它时Vehicule->new( 2, "bleu" );

与类似的类的方法/功能相同

my ($this) = @_ ;

其实我不是很明白Class->new$var->method

4

1 回答 1

3

简短但不可否认的是,对您的问题的回答只是“因为它就是这样工作的”。

Perl 最初不是一种 OO 语言,所以 OO 支持被贴在现有事物的一边,以允许它尽可能多地利用以前存在的东西。该实现的一部分是,当 asub作为方法调用时,调用它的类或对象将添加到其参数列表的开头。 MyClass->new(@args)大致等价于MyClass::new('MyClass', @args)并且,如果$obj是 的一个实例MyClass$obj->foo(@args)则大致等价于MyClass::foo($obj, @args)

我说它们“大致等效”而不是“相同”的原因是,如果方法不是由 实现的,则方法调用版本(使用->)将搜索继承的实现,而调用版本则不会。@ISAMyClasssub

于 2013-03-31T22:23:51.480 回答