MooseX ::类型强制和$ self

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,schemacol属性的类中,并与所提供的胸径/单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.

hdp*_*hdp 5

不,这很好,但强制实际上是设计为全球性的,没有人写过"上下文敏感的强制",因为没有人真的确定如何.(实际上,s/coercions/type constraints/ - 只是说"这个Str必须是一个有效的列名,定义为此对象的columnsHashRef中的一个条目".)

人们通常有解决这个问题around和/或一些组合BUILDBUILDARGS.

  • 我估计.这就是每个人都想做的事情.由于其基本假设,目前的类型约束系统AFAIK无法实现. (2认同)