Как определить значения свойств атрибута по умолчанию в Moose? - PullRequest
2 голосов
/ 15 декабря 2010

Как следует из названия, я хотел бы иметь возможность сделать что-то подобное в моем классе:

use MooseX::Declare;

class MyClass {
    default_attribute_propeties(
        is       => 'ro',
        lazy     => 1,
        required => 1,
    );

    has [qw( some standard props )] => ();

    has 'override_default_props' => (
        is       => 'rw',
        required => 0,
        ...
    );

    ...
}

То есть определите некоторые значения свойств по умолчанию, которые будут применяться ко всем определениям атрибутов, если они не переопределены.

1 Ответ

3 голосов
/ 15 декабря 2010

Звучит так, будто вы хотите написать некоторые объявления пользовательских атрибутов, которые предоставляют некоторые параметры по умолчанию. Это описано в Moose :: Cookbook :: Extennding :: Recipe1 , например ::

package MyApp::Mooseish;

use Moose ();
use Moose::Exporter;

Moose::Exporter->setup_import_methods(
    install     => [ qw(import unimport init_meta) ],
    with_meta   => ['has_table'],
    also        => 'Moose',
);

sub has_table
{
    my ($meta, $name, %config) = @_;

    $meta->add_attribute(
        $name,

        # overridable defaults.
        is => 'rw',
        isa => 'Value', # any defined non-reference; hopefully the caller
                        # passed their own type, which will override
                        # this one.
        # other options you may wish to supply, or calculate based on
        # other arguments passed to this function...

        %config,
    );
}

А потом в вашем классе:

package MyApp::SomeObject;

use MyApp::Moosish;

has_table => (
    # any normal 'has' options;
    # will override the defaults.
);

# remaining class definition as normal.
...