MooseX ::类型强制和$ self

时间:2010-12-17 17:48:05

标签: perl moose moosex-types

有没有让$self进入MooseX::Types胁迫?我在对象中有其他数据,我想用它来强制从StringObject。或者,有Class::MOP的{​​{1}}允许我这样做 - 它必须在类型检查之前触发

请求的伪代码:

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/]} ); - DBCol(对象)的ArrayRef - 需要使用DBColscatalog和{{1在类中找到的属性,以及schema提供的dbh / singleton。

为了减少伪,实际情况只是稍微复杂一些。我能够使用col完成上述操作,现在我想要做的是创建一个允许这种语法的属性特征:

DBHandle

around提供的属性特征has 'column_id' => ( isa => Int , is => 'ro' , traits => ['DBKey'] , default => 5 , column => 'foo' ); ,与上述column相同的方式强制DBKey:这需要能够访问类DBCol {1}},columnsdatabase,以及schema的单身人士。

1 个答案:

答案 0 :(得分:5)

没有。这很好,但强制实际上是设计为全球性的,没有人写过“上下文敏感的强制”,因为没有人真的确定如何。 (实际上,s /强制/类型约束/ - 只是说“这个Str必须是一个有效的列名,定义为该对象的columns HashRef中的一个条目”。)

人们通常使用around和/或BUILDBUILDARGS的某种组合解决此问题。