我在开始的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的最佳实践吗?
答案 0 :(得分:3)
没有理由到那里。可能有人太害羞而无法使用参考文献。
如果使用delete($arg{name})
代替$arg{name}
(以检查意外遗留物),那就不同了。
答案 1 :(得分:1)
作者提供了解释。我发布这个问题之前没有得到它,抱歉。
sub _initialize
内的某处,实际删除了传递的arg
ref的某些键。然后,arg
ref将用于打印带有arg
剩余密钥列表的消息。如果未创建副本,则可能会产生意外的副作用。