Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl对象构造函数_Perl_Constructor - Fatal编程技术网

perl对象构造函数

perl对象构造函数,perl,constructor,Perl,Constructor,我在一篇教程中读到,类似于调用构造函数的内容: my $v = Vehicule->new( 2, "bleu" ); 那么相关的类就是这样的 sub new { my ($class,$nbRoues,$couleur) = @_; my $this = {}; bless($this, $class); $this->{NB_ROUES} = $nbRoues; $this->{COULEUR} = $couleur; re

我在一篇教程中读到,类似于调用构造函数的内容:

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 ($this) = @_ ;
我不明白的是第一个元素如何/为什么包含类名

my ($class,$nbRoues,$couleur) = @_ 
当我们这样称呼它时,
vehicle->new(2,“bleu”)

类的方法/函数也是如此

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

事实上,我并不真正理解
Class->new
$var->method

对你的问题的简短但不令人满意的回答只是“因为这就是它的工作方式”

Perl最初不是一种OO语言,因此OO支持某种程度上是以一种允许它尽可能多地利用以前存在的东西的方式固定在现有事物的一侧。该实现的一部分是,当
sub
作为方法调用时,调用它的类或对象将添加到其参数列表的开头
MyClass->new(@args)
大致相当于
MyClass::new('MyClass',@args)
,如果
$obj
MyClass
的一个实例,
$obj->foo(@args)
大致相当于
MyClass::foo($obj,@args)


我之所以说它们“大致相同”而不是“完全相同”,是因为如果方法不是由
MyClass
实现的,那么方法调用版本(使用
->
)将搜索
@ISA
,以查找继承的实现,而
调用版本则不会。

因为perl计算
vehiclue->new(2,“bleu”)
作为
新车辆2“bleu”
类似于其他perl子例程调用。瞧,
new
只是一个子例程。看一看