Все ли мои классы Moose должны содержать 'namespace :: autoclean' и 'make_immutable' или есть какой-то способ получить их по умолчанию? - PullRequest
8 голосов
/ 22 октября 2010

Согласно документу Moose Best Practices, мои классы Moose должны выглядеть так:

package Person;

use Moose;
use namespace::autoclean;

# extends, roles, attributes, etc.

# methods

__PACKAGE__->meta->make_immutable;

1;

См. Moose :: Manual :: BestPractices .

ИВ 99% случаев это то, что я хочу, поэтому есть ли какой-нибудь способ, чтобы мое пространство имен автоматически очищалось, и мои классы делались неизменяемыми по умолчанию, поэтому мне не нужно, чтобы этот код загромождался?

Может бытьтехническая причина, почему это невозможно или почему не следует делать?

Спасибо

Ответы [ 2 ]

8 голосов
/ 22 октября 2010

Я думаю, что единственный Один из способов избежать этого - использовать 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 Person is mutable { ... }


Возможно, естьтехническая причина, почему это невозможно или почему это не следует делать?

Технически было бы сложно собрать все это вместе.MooseX::Declare использует Devel::Declare для создания необходимого синтаксиса для интерпретации Perl.

Так что, если для вас проблема с котлом, подумайтеиспользуя MooseX::Declare.Я использовал его во многих проектах без проблем и считаю его идеальным для быстрого создания эскизов приложения на основе классов.Однако большую часть времени я доволен образцом и поэтому придерживаюсь стандарта Moose.

3 голосов
/ 22 октября 2010

Я думаю, MooseX :: MakeImmutable может сделать это за вас.

...