关于最佳做法的常见建议Moose
如下:
"使用
namespace::autoclean
位只是良好的代码卫生,因为它会在包的编译周期结束时从类的命名空间中删除导入的符号,包括Moose
关键字.一旦构建了类,就不需要这些关键字.(这比放置首选no Moose
在你的包裹的最后)."
采取Moose ::手册:: BestPractices(强调我的).
我理解上面引用的所有内容,除了一件事:为什么在词法范围的末尾使用namespace::autoclean
首选no Moose
?
是因为namespace::autoclean
它更通用,允许使用更多选项,还是有一些内在的实现方式(特别是针对Moose
类,可能),使其更可靠?
我没有找到澄清这一点的文件,我非常想知道正确的答案.
前言注意: 为了便于讨论,请暂时忽略这样一个事实:使用Class :: Accessor可以实现相同的目的,甚至只需使用Moose(在考虑代码可读性时可能会有更好的结果)和可维护性).
关于面向对象的Perl,本书Programming Perl
讨论了使用闭包生成存取方法的能力.例如,这是一段有效的代码:
#!perl
use v5.12;
use warnings;
# at run-time
package Person1;
my @attributes = qw/name age address/;
for my $att ( @attributes )
{
my $accessor = __PACKAGE__ . "::$att";
no strict 'refs'; # allow symbolic refs to typeglob
*$accessor = sub {
my $self = shift;
$self->{$att} = shift if @_;
return $self->{$att};
};
}
sub new { bless {}, shift }
package main;
use Data::Dumper;
my $dude …
Run Code Online (Sandbox Code Playgroud)