免费注册 查看新帖 |

Chinaunix

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

overload 之后为啥要 吧 所得的值 在bless 一下呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-06 16:35 |只看该作者 |倒序浏览
本帖最后由 3gtan 于 2010-04-06 16:47 编辑

  1. use overload '+' => \&clip_add,
  2.              '-' => \&clip_sub;

  3. sub new {
  4.     my $class = shift;
  5.     my $value = shift;
  6.     return bless \$value => $class;
  7. }

  8. sub clip_add {
  9.     my ($x, $y) = @_;
  10.     my ($value) = ref($x) ? $x : $x;
  11.     $value     += ref($y) ? $y : $y;
  12.     $value = 255 if $value > 255;
  13.     $value =   0 if $value < 0;
  14.     return bless \$value => ref($x);
  15. }

  16. sub clip_sub {
  17.     my ($x, $y, $swap) = @_;
  18.     my ($value) = (ref $x) ? $x : $x;
  19.     $value     -= (ref $y) ? $y : $y;
  20.     if ($swap) { $value = -$value }
  21.     $value = 255 if $value > 255;
  22.     $value =   0 if $value < 0;
  23.     return bless \$value => ref($x);
  24. }

  25. package main;

  26. $byte1 = ClipByte->new(200);
  27. $byte2 = ClipByte->new(100);

  28. $byte3 = $byte1 + $byte2;    # 255
  29. $byte4 = $byte1 - $byte2;    # 100
  30. $byte5 = 150 - $byte2;       # 50
复制代码
如题
为啥  bless value 给 自己的class?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-04-06 16:40 |只看该作者
这个……
还是先了解清楚 bless 是干嘛的吧。

论坛徽章:
0
3 [报告]
发表于 2010-04-06 16:46 |只看该作者
bless 不是 吧 reference 注册给 packagename 变成 object的吗?

论坛徽章:
0
4 [报告]
发表于 2010-04-06 16:48 |只看该作者
问错啦。不是问return 是问 为啥要 再bless呢
直接输出 结果不久ok啦?

论坛徽章:
0
5 [报告]
发表于 2010-04-06 17:00 |只看该作者
还有个问题  overload之后 的 subroutine 就没有 隐藏的  reference参数了吧

论坛徽章:
0
6 [报告]
发表于 2010-04-06 17:01 |只看该作者
hoho 为了 相加后的 value 能够继续调用 method 对拉吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP