- 论坛徽章:
- 0
|
我们知道,Moose会自动为每一个属性创建一个reader和一个writer,这样我们就可以直接使用。在Package外,毫无疑问,应该使用reader和writer进行访问。而在package内,你会选择直接访问还是仍旧使用reader和writer呢?如下面两种trim方法你会选哪个?
先谈点我个人的考虑:
第一种直接方法,简单明了,不需要临时变量,但是缺点是如果你对desc使用了before,after等语法糖时,在这里是不起作用的;
第二种间接方法,调用了一次reader,又调用了一次writer,复杂了点,但符合封装的特性。- package Foo;
- use Moose;
- has 'desc' => (
- is => 'rw',
- );
- # trim method 1
- sub trim_desc1 {
- my $self = shift;
- $self->{desc} =~ s/^\s*//;
- $self->{desc} =~ s/\s*$//;
- }
- # trim method 2
- sub trim_desc2 {
- my $self = shift;
- my $desc = $self->desc;
- $desc =~ s/^\s*//;
- $desc =~ s/\s*$//;
- $self->desc($desc);
- }
- __PACKAGE__->meta->make_immutable;
复制代码 |
|