免费注册 查看新帖 |

Chinaunix

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

学写package时就遇到的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-26 15:14 |只看该作者 |倒序浏览
求教!

我写了个cocoa.pm

  1. #!/usr/bin/perl

  2. package cocoa;


  3. sub new {
  4. my $type = shift;
  5. my %parm = @_;
  6. my $this = [];
  7. $this->;[0] = $parm{'Name'};
  8. $this->;[1] = $parm{'x'};
  9. $this->;[2] = $parm{'y'};
  10. bless $this, $type;
  11. return $this;
  12. }
  13. 1;
复制代码

然后这样调用:
#!/usr/bin/perl
push(@INC,"pwd";
use cocoa;
$mug=cocoa::new('Name'=>;'top','x'=>;10,'y'=>;20);
print "Name=$mug->;{'Name'}\n";
print "x=$mug->;{'x'}\n";
print "y=$mug->;{'y'}\n";

可是执行后,报错:
Can't coerce array into hash at test line 5.

还有一直没有办法理解bless到底干什么用,就是建立类和变量的关系么?
高手能不能用通俗的语言介绍下!
谢谢了~~~

论坛徽章:
0
2 [报告]
发表于 2005-10-26 17:05 |只看该作者

学写package时就遇到的问题?

#!/usr/bin/perl

package cocoa;


sub new {
my $type = shift;
my %parm = @_;
my $this = [];
$this->;[0] = $parm{'Name'};
$this->;[1] = $parm{'x'};
$this->;[2] = $parm{'y'};
bless $this, $type;
return $this;
}
1;

$this 应该是hash的reference,不是array的reference,
要这样写
my $this = {} ; # hash reference
#[] 是array reference

论坛徽章:
0
3 [报告]
发表于 2005-10-26 17:28 |只看该作者

学写package时就遇到的问题?

[quote]原帖由 "angleeye"]$this 应该是hash的reference,不是array的reference, [/quote 发表:

呵呵,严重错误。
$this 是指向什么的引用根本就没有规定。
而且看楼主的程序,$this 显然应该是一个数组的引用。

2楼主:你可以看看《Perl 语言编程》
或者找一下 flw 之前发表的一些回复(精华区中有)。

论坛徽章:
0
4 [报告]
发表于 2005-10-26 17:46 |只看该作者

学写package时就遇到的问题?

我就是看了电子文档,不知道怎么办。才来问问的。哎~~~~帮下忙吧

论坛徽章:
0
5 [报告]
发表于 2005-10-26 18:18 |只看该作者

学写package时就遇到的问题?

原帖由 "Haskell" 发表:

呵呵,严重错误。
$this 是指向什么的引用根本就没有规定。
而且看楼主的程序,$this 显然应该是一个数组的引用。

2楼主:你可以看看《Perl 语言编程》
或者找一下 flw 之前发表的一些回复(精华区中有)。


惭愧!

sub new {
my $type = shift;
my %parm = @_;
my $this = {};
$this->;{'Name'} = $parm{'Name'};
$this->;{'x'} = $parm{'x'};
$this->;{'y'} = $parm{'y'};

bless $this, $type;
return $this;
}
1;

偶是没有用过数组的引用。
确实不知道能bless,受教。

论坛徽章:
0
6 [报告]
发表于 2005-10-26 18:54 |只看该作者

学写package时就遇到的问题?

原帖由 "angleeye" 发表:
bless $this, $type;
return $this;
}
1;

偶是没有用过数组的引用。
确实不知道能bless,受教。

建议你看看《高级 Perl 编程》,上面讲了一种使用数组的引用作为对象的方案。
事实上,通过 hash 引用来存储对象是一种简便、但是效率并不高的方法。
因为 hash 本身就有“键”->;“值”对这种天然的含义,因此用 hash 引用做对象时能够轻易地实现“属性名称”->;“属性值”这种语义,但是不知你有没有想过,这样的话每个对象都要保存一份属性名称,从而造成浪费。(设想一下同时存在成千上万个对象时的情形)。

另外一种情形,就是为了存储结构的可移植性。时间不早了,改天再继续。

论坛徽章:
0
7 [报告]
发表于 2005-10-27 12:25 |只看该作者

学写package时就遇到的问题?

2楼主:你可以看看《Perl 语言编程》
或者找一下 flw 之前发表的一些回复(精华区中有)。


    

论坛徽章:
0
8 [报告]
发表于 2005-10-28 14:39 |只看该作者

学写package时就遇到的问题?

谢谢楼上的各位,谢谢angleeye!!!

我知道了,bless后的$this是数组引用,所以return后。
在调用时:
print "Name=$mug->;[0]\n";
print "x=$mug->;[1]\n";
print "y=$mug->;[2]\n";

呵呵~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP