小编Sér*_*ino的帖子

为什么"使用namespace :: autoclean"更喜欢"no Moose"?

关于最佳做法的常见建议Moose如下:

"使用namespace::autoclean位只是良好的代码卫生,因为它会在包的编译周期结束时从类的命名空间中删除导入的符号,包括Moose关键字.一旦构建了类,就不需要这些关键字.(这比放置首选no Moose在你的包裹的最后)."

采取Moose ::手册:: BestPractices(强调我的).

我理解上面引用的所有内容,除了一件事:为什么在词法范围的末尾使用namespace::autoclean首选no Moose

是因为namespace::autoclean它更通用,允许使用更多选项,还是有一些内在的实现方式(特别是针对Moose类,可能),使其更可靠?

我没有找到澄清这一点的文件,我非常想知道正确的答案.

perl moose

15
推荐指数
1
解决办法
1769
查看次数

使用闭包来修改Perl BEGIN块中的类

前言注意: 为了便于讨论,请暂时忽略这样一个事实:使用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)

oop perl closures module accessor

7
推荐指数
1
解决办法
362
查看次数

标签 统计

perl ×2

accessor ×1

closures ×1

module ×1

moose ×1

oop ×1