gpt4 book ai didi

perl - 我所有的 Moose 类都必须包含 'namespace::autoclean' 和 'make_immutable' 还是有某种方法可以默认获取这些?

转载 作者:行者123 更新时间:2023-12-04 06:48:45 34 4
gpt4 key购买 nike

根据 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 macro下面变成你的例子:

use MooseX::Declare;

class Person {

# attributes

# methods
}
它会自动插入 namespace::autoclean并使类不可变。
对于扩展类,您可以:
class Person extends Human { ... }
要添加角色,您可以:
class Person with BlueEyeRole { ... }
您可以轻松组合这些:
class Person extends Human with BlueEyeRole { ... }
您还可以获得一些其他定义的关键字,例如。 method :
class Person {
has 'name' => (is => 'rw', isa => 'Str');

method hello { "Hello " . $self->name }
}
如果你确实想让你的类(class)可变,那么它:
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 .我已经在很多项目中使用了它,没有任何问题,并且在快速绘制基于类的应用程序时发现它是理想的。然而,大多数时候我对样板很满意,所以坚持使用标准 Moose .

关于perl - 我所有的 Moose 类都必须包含 'namespace::autoclean' 和 'make_immutable' 还是有某种方法可以默认获取这些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3997241/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com