2010-12-15 6 views
2

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

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, 
     ... 
    ); 

    ... 
} 

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

ответ

3

Похоже, вы хотите написать некоторые пользовательские объявления атрибутов, которые предоставляют некоторые параметры по умолчанию. Это описано в Moose::Cookbook::Extending::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. 
+0

Для разъяснения, я понимаю, что `$ name` в` функции has_table` задается с помощью `has_table ' my_attr '=> (...) `? Кроме того, вы имеете в виду `...-> build_import_methods` вместо` ...-> setup_import_methods`? – gvkv 2010-12-16 12:22:56

Смежные вопросы