Eva*_*oll 3 perl moose moosex-types
无论如何都要$self进入MooseX::Types强制?我在对象中有其他数据,我想用它来强制从a String到a Object.或者,有什么类似Class::MOP的东西initializer允许我这样做 - 它必须在类型检查之前开火.
请求的伪代码:
with 'DBHandle';
has 'database' => ( isa => 'Str', is => 'ro', default => 'Db' );
has 'schema' => ( isa => 'Str', is => 'ro', default => 'schema' );
has 'table' => ( isa => 'Str', is => 'ro', default => 'column );
has 'columns' => ( isa => DBCols, is => 'ro', default => sub {[qw/foo bar baz/]} );
Run Code Online (Sandbox Code Playgroud)
在这里,我想"列"强迫的DBCols- DBCol的(对象)的数组引用-需要使用的catalog,schema和col属性的类中,并与所提供的胸径/单DBHandle.
为了减少伪,实际情况只是稍微复杂一些.我能够完成上述操作around,现在我想要做的是创建一个允许这种语法的属性特征:
has 'column_id' => (
isa => Int
, is => 'ro'
, traits => ['DBKey']
, default => 5
, column => 'foo'
);
Run Code Online (Sandbox Code Playgroud)
其中属性特征column提供DBKey,胁迫,以DBCol同样的方式,上面columns会:这需要访问类的能力database,schema,table,再单身了dbh.
不,这很好,但强制实际上是设计为全球性的,没有人写过"上下文敏感的强制",因为没有人真的确定如何.(实际上,s/coercions/type constraints/ - 只是说"这个Str必须是一个有效的列名,定义为此对象的columnsHashRef中的一个条目".)
人们通常有解决这个问题around和/或一些组合BUILD和BUILDARGS.