免费注册 查看新帖 |

Chinaunix

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

Moose内部属性调用,直接or间接? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-02 19:28 |只看该作者 |倒序浏览
我们知道,Moose会自动为每一个属性创建一个reader和一个writer,这样我们就可以直接使用。在Package外,毫无疑问,应该使用reader和writer进行访问。而在package内,你会选择直接访问还是仍旧使用reader和writer呢?如下面两种trim方法你会选哪个?
先谈点我个人的考虑:
第一种直接方法,简单明了,不需要临时变量,但是缺点是如果你对desc使用了before,after等语法糖时,在这里是不起作用的;
第二种间接方法,调用了一次reader,又调用了一次writer,复杂了点,但符合封装的特性。
  1. package Foo;
  2. use Moose;

  3. has 'desc' => (
  4.     is  => 'rw',
  5. );

  6. # trim method 1
  7. sub trim_desc1 {
  8.     my $self = shift;
  9.     $self->{desc} =~ s/^\s*//;
  10.     $self->{desc} =~ s/\s*$//;
  11. }

  12. # trim method 2
  13. sub trim_desc2 {
  14.     my $self = shift;
  15.     my $desc = $self->desc;
  16.     $desc =~ s/^\s*//;
  17.     $desc =~ s/\s*$//;
  18.     $self->desc($desc);
  19. }

  20. __PACKAGE__->meta->make_immutable;
复制代码

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
2 [报告]
发表于 2013-06-03 14:07 |只看该作者
如果选择了用 Moose 就重点要考虑的是封装的特性对吧。所以选择不用说。。

论坛徽章:
0
3 [报告]
发表于 2013-06-04 13:24 |只看该作者
回复 2# iakuf


   即使是在package里面吗? 感谢您的回复!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP