免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5563 | 回复: 4
打印 上一主题 下一主题

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

论坛徽章:
0
1 [报告]
发表于 2007-03-08 14:52 |显示全部楼层
通过你们的讨论我自己结合做了点总结,但有些地方用语言根本无法形容,哪位高手最好给例子?

类和方法理解
类其实就是一包,而包只不过是perl符号表中名字的集合,方法只不过是perl的一个子程序,
类名是第一参数,因为这个类整个就是一个hash,所以如果要操作类的数据,就要通过hash的引用
来访问,所以在类的方法体里,需要一个这样的变量,来对hash本身的数据,方法进行操作。
因此
   sub new{
    $class=shift  因为类名是第一参数 所以class就是类名?
     $this={}   通过这个引用来访问类的数据
bless $this  $this属于 $class类?

如何对hash类实现:
如$object=new Class;
$object->sub_a();
$object 此是是对象/实例,工作过程,hash本身没有存方法,这完全是->符号的功劳,它只不过是调

用了一下它右边的那个sub 并把左边的那个引用变量unshift到sub的参数列表中去,为了正确的找到
右边的那个sub,它还需要把左边的那个引用变量ref一下取出原先bless进去的那个。
因此在子程序 sub_a(){
   my $self=shift; 的时候$self就得到了引用变量$object 因此它成为对象/实例

类方法和实例方法

实例方法其主要

实例也就是之前的$this={}引用,而对象通过执行某种动作取其行为,因此实例方法也叫对象方法,而类方法则是针对于整个类??

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

论坛徽章:
0
2 [报告]
发表于 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
3 [报告]
发表于 2007-03-08 16:45 |显示全部楼层
原帖由 flw 于 2007-3-8 16:09 发表

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



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

下次会注意

论坛徽章:
0
4 [报告]
发表于 2007-03-08 18:30 |显示全部楼层
我发觉flw说话很刻薄,可能你是无心之过。
论坛本来就是方便大家交流的。
我是凭借自己的感觉去发问的,难免有部分是表达不清,我想每个人都是这么走过来的(当然排除你在外)
但我给于你一些建议,你可以不必回答你觉的没有任何意义的帖子。但请您别
用嗤笑的语气回答问题。。

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

论坛徽章:
0
5 [报告]
发表于 2007-03-08 19:56 |显示全部楼层
呵呵。。。

我是来学习的。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP