面向对象的perl 3

面向对象的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 ;)
---------------------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值