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
只是一个子例程。看一看