为什么要创建perl对象属性哈希的浅表副本?

时间:2014-02-21 03:36:59

标签: perl oop

我在开始的perl书中找到了这段代码片段(关于OOP的章节):

 1  sub new {
 2    my ($class, $arg) = @_;
 3    my $self = bless {}, $class;
 4    $self->_initialize;
 5   
 6    return $self;
 7  }

 8  sub _initialize {
 9    my ($self, $arg) = @_;
10    my $class = ref $self;
11    my %arg = %$arg;
12
13    $self->{attributes}{name} = $arg{name};
14    ...
15  }

在LINE_11中,我认为你真的不需要创建arg ref的浅表副本。我们可以简单地使用解除引用运算符->来获取哈希值。有没有一个很好的理由为什么创建浅拷贝?是否只是为了使代码更具可读性?这被认为是perl OOP的最佳实践吗?

2 个答案:

答案 0 :(得分:3)

没有理由到那里。可能有人太害羞而无法使用参考文献。

如果使用delete($arg{name})代替$arg{name}(以检查意外遗留物),那就不同了。

答案 1 :(得分:1)

作者提供了解释。我发布这个问题之前没有得到它,抱歉。

sub _initialize内的某处,实际删除了传递的arg ref的某些键。然后,arg ref将用于打印带有arg剩余密钥列表的消息。如果未创建副本,则可能会产生意外的副作用。

相关问题