2010-12-15 5 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

、私は 'has_table'機能の' $のNAME'が 'has_table」を使用して与えられることそれを取りますmy_attr '=>(...) '?また、 '...-> setup_import_methods'ではなく' ...-> build_import_methods'を意味しますか? – gvkv

+0

@ gvkv:正しいです - has_tableは単なる正規の関数です。最初の引数は属性名で、残りの引数は帰属オプションのフィールドと値です。 私はsetup_import_methodsを意味します - build_import_methodsはあなたがそれらを修正することを可能にするcoderefsを返しますが、あなた自身でインストールする必要があります。 – Ether

関連する問題