免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2007-03-08 16:09 |只看该作者
原帖由 knuoxy 于 2007-3-8 14:52 发表
通过你们的讨论我自己结合做了点总结,但有些地方用语言根本无法形容,哪位高手最好给例子?

类和方法理解
类其实就是一包,而包只不过是perl符号表中名字的集合,方法只不过是perl的一个子程序,
类名是第一 ...

拜托你把你想说的话和引用我的话分开好不好?
不然的话看上去都不知道在说什么。

论坛徽章:
0
12 [报告]
发表于 2007-03-08 16:44 |只看该作者
Sub declareMain{
My $class=shift @_;
My($name,$extends,$implements)=@_;
Print “\n public class $name”;
}

$cup=new Cocoa;  #创建对象
$cup->declareMain(“Msg”,”java.appet.Applet”,”Runnable”);#因为$cup对象知道自己属于Cocoa类因此它调用的方式就如Cocoa::declareMain($cup(“Msg”,”java.appet.Applet”,”Runnable”);

Cocoa中
Sub declareMain{
My $class=shift @_;  将得$cup 因此$class知道自己也属于Cocoa类
不知道这么理解对不对。

另外 有点我非常模糊不清。
Sub new{
My $this={};
Print “\n/*\n**
Bless $this;
Return $this;
}

Sub declareMain{
My $class=shift @_;
My($name,$extends,$implements)=@_;
Print “\n public class $name”;
}

在这里因为第一个定义了类,而后创建了对象 在由对象调用子程序declareMain 那么是不是说declareMain就成为了实例方法,也就是虚方法 而sub new则是静方法 也就是类方法   

请高手在做解答。。

[ 本帖最后由 knuoxy 于 2007-3-8 16:47 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2007-03-08 16:45 |只看该作者
原帖由 flw 于 2007-3-8 16:09 发表

拜托你把你想说的话和引用我的话分开好不好?
不然的话看上去都不知道在说什么。



真不好意思。。我是直接ctrl+v的上去的。。

下次会注意

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2007-03-08 17:31 |只看该作者
看不懂你的程序。
My Sub 的。
而且不知道哪些是程序哪些是描述。

论坛徽章:
0
15 [报告]
发表于 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__

上面能说好大一篇了,其实知识就是这样‘试’出来的,想解释的都试试?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2007-03-08 17:33 |只看该作者
> 将得$cup 因此$class知道自己也属于Cocoa类
不知道“将得”是啥意思。

> 那么是不是说declareMain就成为了实例方法,也就是虚方法
你到底是想说 declareMain 是实例方法还是想说它是虚方法?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2007-03-08 17:34 |只看该作者
> #因为$cup对象知道自己属于Cocoa类因此它调用的方式就如Cocoa::declareMain($cup(“Msg”,”java.appet.Applet”,”Runnable”);
对象什么都不知道。它又没有智商你怎么让它知道?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2007-03-08 17:36 |只看该作者
> 而sub new则是静方法 也就是类方法
这里又冒出一个“静方法”,你说的是指“静态(static)”的意思吗?怎么这么多我听都没听过的术语?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2007-03-08 17:37 |只看该作者
原帖由 perlpg 于 2007-3-8 17:33 发表

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

说的不错。以前讨论时我写过几段这样的代码,事实上文档里也有不少这样的代码。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2007-03-08 17:41 |只看该作者
原帖由 knuoxy 于 2007-3-8 16:45 发表

真不好意思。。我是直接ctrl+v的上去的。。

复制就复制吧。你最起码可以在两边加个 【】 括号嘛。再要不这样子
----------------------------------
引用部分
----------------------------------
这样都很不错啊。

原帖由 knuoxy 于 2007-3-8 16:45 发表

下次会注意

下次复下次,下次何其多。
为什么不从这次就开始呢?
BBS 有编辑功能的。

总之一句话,如果你想要别人帮你,那就尽量方便一下看帖子的人。
不然人家都看不懂你在说什么,怎么帮你?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP