Perl 面向对象的new函数以及bless的理解



这算是Perl OOP编程的构造函数
----------------------------------------------
package xxx;
...
sub new {
    my $class = shift();
    my $self = {};
    bless $self, $class;
    return $self;
}
...
1;
----------------------------------------------

更简短的构造函数如下
sub new {
    my $self = bless { };
    return $self;
}  

在package的sub里面,shift函数返回的值第一个是隐含变量,是类名,所以my $class = shift();成功地将类名赋予$class变量。

bless的格式是bless $object, $class;

bless的第一个参数一般是一个哈希空引用,此处省略my $self = {};直接写bless {}也可。
bless的第二个参数如果省略,就表示当前package的名字。

bless意为祝福,推测来自基督教语境或神话,既法师为object祝福,object就会变为某一class。
法师对着object吹口气,object就可以变成骑士,也可以将object变成青蛙。
bless是起到对object绑定到某一类的作用。

经过bless后,在调用object的metho的时候perl就知道到哪一个package中查找其method。

 

posted on 2021-02-25 11:48  zwu  阅读(637)  评论(0)    收藏  举报

导航