加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 我的所有Moose类都必须包含’namespace :: autoclean’

发布时间:2020-12-15 21:42:40 所属栏目:大数据 来源:网络整理
导读:根据Moose最佳实践文档,我的Moose类应该如下所示: package Person;use Moose;use namespace::autoclean;# extends,roles,attributes,etc.# methods__PACKAGE__-meta-make_immutable;1; 见Moose::Manual::BestPractices. 99%的时间这是我想要的,所以有没有
根据Moose最佳实践文档,我的Moose类应该如下所示:
package Person;

use Moose;
use namespace::autoclean;

# extends,roles,attributes,etc.

# methods

__PACKAGE__->meta->make_immutable;

1;

见Moose::Manual::BestPractices.

99%的时间这是我想要的,所以有没有办法让我的命名空间自动清理,我的类默认是不可变的,所以我不必让这个代码混乱?

也许有一个技术原因导致它不可能或为什么不应该这样做?

谢谢

解决方法

我认为避免这种情况的唯一方法是使用 MooseX::Declare.

MooseX::Declare是一个宏,在下面变成你的例子:

use MooseX::Declare;

class Person {

    # attributes

    # methods
}

它会自动插入namespace :: autoclean并使该类不可变.

对于扩展课程,您可以:

class Person extends Human { ... }

要添加角色,您需要:

class Person with BlueEyeRole { ... }

你可以轻松地结合这些:

class Person extends Human with BlueEyeRole { ... }

您还可以获得一些其他定义的关键字,例如.方法:

class Person {
    has 'name' => (is => 'rw',isa => 'Str');

    method hello { "Hello " . $self->name }
}

如果你确实希望让你的类可变,那么:

class Person is mutable { ... }

Maybe there is a technical reason why it isn’t possible or why it shouldn’t be done?

从技术上讲,将这一切都拉到一起很难. MooseX::Declare利用Devel::Declare为Perl构建必要的语法来解释.

因此,如果锅炉板是您的问题,那么考虑使用MooseX::Declare.我已经在很多项目上使用它而没有任何问题,并且在快速草绘基于类的应用程序时发现它是理想的.但是大多数时候我对样板很满意,所以坚持使用标准的驼鹿.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读