Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 我所有的Moose类都必须包含';名称空间::自动清理';和';使#u不可变';或者有什么方法可以在默认情况下获取这些信息?_Perl_Moose - Fatal编程技术网

Perl 我所有的Moose类都必须包含';名称空间::自动清理';和';使#u不可变';或者有什么方法可以在默认情况下获取这些信息?

Perl 我所有的Moose类都必须包含';名称空间::自动清理';和';使#u不可变';或者有什么方法可以在默认情况下获取这些信息?,perl,moose,Perl,Moose,根据Moose最佳实践文档,我的Moose课程应该如下所示: package Person; use Moose; use namespace::autoclean; # extends, roles, attributes, etc. # methods __PACKAGE__->meta->make_immutable; 1; 看 99%的时候这就是我想要的,那么有没有办法让我的命名空间自动清理,让我的类在默认情况下保持不变,这样我就不必让代码变得混乱 也许有一个技术

根据Moose最佳实践文档,我的Moose课程应该如下所示:

package Person;

use Moose;
use namespace::autoclean;

# extends, roles, attributes, etc.

# methods

__PACKAGE__->meta->make_immutable;

1;

99%的时候这就是我想要的,那么有没有办法让我的命名空间自动清理,让我的类在默认情况下保持不变,这样我就不必让代码变得混乱

也许有一个技术上的原因,为什么它不可能或为什么它不应该这样做

谢谢

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

是一个
,它将下面变成您的示例:

use MooseX::Declare;

class Person {

    # attributes

    # methods
}
它自动插入
namespace::autoclean
,并使类不可变

要扩展类,请执行以下操作:

class Person extends Human { ... }
class Person with BlueEyeRole { ... }
对于添加角色,您可以执行以下操作:

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 { ... }

也许有一个技术上的原因,为什么它不可能或为什么它不应该这样做

从技术上讲,要把这一切结合起来是很困难的。使用来构建Perl解释所需的语法


因此,如果锅炉板是一个问题,那么就考虑使用。我已经在很多项目中使用过它,没有任何问题,并且在快速绘制基于类的应用程序时发现它非常理想。然而,大多数时候我对样板文件很满意,所以坚持使用标准的
Moose

我认为它可以为您做到。

因为它是错误的。MX::D绝不是实现这一目标的唯一途径。@rafl:我说过这是我知道的唯一途径。所以我认为这不值得投反对票:(固定序言。对读者来说,重要的是它是否真的是唯一的方式,而不是它是否是德雷顿知道的唯一方式。:)谢谢@Ether。我本来打算做类似的改变,但被我4岁的孩子叫走了:)@rafl:没关系。顺便说一句,还有什么其他方法可以减少这个样板?谢谢jira,我会尝试一下。