免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xhaooo
打印 上一主题 下一主题

关于perl 里类的实现的一些疑惑 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-03-08 17:33 |显示全部楼层

其实有代表性的代码比文字更好解释。

package test1;
sub new{
    my $proto = shift;
    my $class = ref($proto) || $proto;

        my $self = {};
        bless $self, $class;
        return $self;
}

sub ShowME {
        return "Test1\n";
}

package test2;

sub oddness {
        my $class = 'test1';
        my $self = {};
        bless $self, $class;
        return $self;
}

sub createme {
        shift;
        my $self = {};
        $self->{CALLBACK} = shift || sub {print "In call test2\n"};
       
        return bless $self;
}

sub ShowME {
        my $self = shift;
        $self->{CALLBACK}();
        return "Test2\n";
}

package test3;

sub build {
        my $self = [];
        push @{$self}, sub {print shift,"\n"};
        bless $self;
        return $self;
}

sub ShowME{
        my $self = shift;
        print "Me store: @$self\n";
        $self->[0]('in test3 ShowME call.');
        return "Test3\n";
}

package main;

my $t1=test1->new();
print $t1->ShowME;

my $t20=test2->oddness;
print "I call package test2? ",$t20->ShowME;

my $t21=test2->createme;
# 注释/不注释下面一行看不同结果
#$t21->{CALLBACK} = sub {print "Call outside.\n";};
print $t21->ShowME;

my $t3=test3->build;
push @$t3,'+++';
$t3->[0]('in main call.');
print $t3->ShowME();

__END__

上面能说好大一篇了,其实知识就是这样‘试’出来的,想解释的都试试?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP