面向对象的perl 3

王朝perl·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

面向对象的perl 3

如何使用instance variabl实例变量

什么是实例变量, 实例变量就是和实例关联的变量。 不同的对象的实例变量是在不同的

namespace里的,就是说是互无关系的, 是私有财产。与其相对的是类变量,她是公有的。

说到这里要提一下前面一节中提到的构造器。在前面提到的所有的构造器中,我们都用了一

个匿名哈西作为bless的参数,是否哈西有什么神奇的地方呢?实际上我们可以bless任何一

个东西的ref. scalar, array, hash, sub, typeglob. 使用哈西的目的是,她的键/值对

可以更方便的表达实例变量。

下面举一个例子说明具体是怎么管理实例变量的

package Hero;

sub new{

my $class = shift;

my $self = {@_}; # 这里和前面不同

bless $self, $class;

return $self;

}

sub getName{

my $hero = shift;

return $hero->{name};

}

---------------------------------------------------

use Hero;

my $refHero = Hero-new(name="wti"); # create a hero whose name is wti

print $refHero-getName; # here will get wti ;)

---------------------------------------------------

如前面一节所述,使用->时传给new的参数实际上是("Hero",name=>"wti"),知道这点,

上面的代码就很好理解了。 $class 先取出了“Hero", 之后的东西就到了{}里。这个时候

$self 就是 {name=>"wti"}; $self 又在构造一个新Hero的时候传给了$refHero。

下面 $refHero->getName; 调用实例函数(以后会讲)同样用了->, 传给getName的参数表

是($refHero), 到了getName里, $refHero传给了$hero, $hero现在是一个哈西的引用,

其哈西是{name=>"wti"}. 就此getName终于返回了Hero的名字“wti":).

下面的代码和上面的效果是一样的,作为练习大家自己分析吧!(注意,这里体现出哈西的长处了,

如果用数组,你就要有很好的记忆,记住各个属性在数组的第几位)

package Hero;

sub new{

my $class = shift;

my $self = [@_]; # 这里和前面不同

bless $self, $class;

return $self;

}

sub getName{

my $hero = shift;

return $hero->[0];

}

1;

---------------------------------------------------

use Hero;

my $refHero = Hero-new("wti"); # create a hero whose name is wti

print $refHero-getName; # here will get wti ;)

---------------------------------------------------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航