- 论坛徽章:
- 0
|
我一直对perl 里类的实现和使用有些迷糊, 书也看了, 但还是有些晕晕呼呼, 我觉得还是讨论来的快, 所以在此写一下关于我自己对perl类的理解, 希望大家能给于指点:
我的理解:
首先perl 的类就是一个包, 在这个包里定义的函数就是类的方法.
类整个的实现,是通过一个匿名hash引用实现的
通过hash 这种数据结构, 一个变量就可以映射一个复杂的数据结构, 这个变量也就是这个hash的引用.
my $self = {};
$self->{data1} = 1;
$self->{data2} = 2;
以上是数据的上, hash 对类的实现,
*问题1. 那么类的方法(包里函数)怎么实现的?
是hash 里面存了 子函数的引用? 然后就可以通过这个引用来调用函数,达到了类里对方法的调用的目的?
*问题2. 为什么类的方法的第一个参数都是类本身(那个引用变量)
因为这个类整个就是一个hash ,所以如果要操作类的数据(hash的数据), 就要通过hash的引用来访问,所以在类的方法体里, 需要一个这样的变量, 来对hash本身的数据,方法进行操作. 这样理解对不? :)
sub new {
my $class = shift;
my $self = {};
bless $self,$class;
return $self;
}
*问题3. 每个类都会有个初始化函数new, 这new 是创造这个hash的地方. 但为啥也要先shift 一个class, 这个时候,那个承载类的hash应该还没有创建吧, 这个shift ,会得到什么? 还是根本就没用, 只是声明了个变量?
问题4. 哪位明白的高人,给解释一下bless, 是干啥的, 如果以上代码这样写
sub new {
my $class = shift;
my $self = {};
$class = $class;
return $self;
}
效果是不是一样呢?
大概就这些困惑吧, 主要是对perl里类的实现机制没个清晰的把握, 希望已经明白的, 有经验的兄弟或姐妹能深入的谈一下, 自己的理解 , 谢谢了
希望讨论使大家对perl 的类有一个更清晰的理解, 能够对困惑, 迷糊朋友有所帮助!! |
|