Perl MooseX::类型强制和$self
有没有办法让Perl MooseX::类型强制和$self,perl,moose,moosex-types,Perl,Moose,Moosex Types,有没有办法让$self进入MooseX::Types强制?我在对象中有其他数据,我想使用这些数据将强制从字符串播种到对象。或者,是否有类似于Class::MOP的初始值设定项的东西允许我这样做——它必须在类型检查之前启动 请求的伪代码: with 'DBHandle'; has 'database' => ( isa => 'Str', is => 'ro', default => 'Db' ); has 'schema' => ( isa => 'Str',
$self
进入MooseX::Types
强制?我在对象中有其他数据,我想使用这些数据将强制从字符串
播种到对象
。或者,是否有类似于Class::MOP
的初始值设定项
的东西允许我这样做——它必须在类型检查之前启动
请求的伪代码:
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/]} );
这里,我希望“columns”强制使用DBCols
——一个DBCol(对象)的ArrayRef——需要使用类中的catalog
、schema
和col
属性,并使用DBHandle
提供的dbh/singleton
为了减少这种假象,实际情况只是稍微复杂一点。我可以用左右的来完成上面的工作,现在我想做的是创建一个属性trait,该属性trait允许使用以下语法:
has 'column_id' => (
isa => Int
, is => 'ro'
, traits => ['DBKey']
, default => 5
, column => 'foo'
);
如果由DBKey
提供的属性trait列
强制执行DBCol
的方式与上述列
相同:这需要能够访问类数据库
,模式
,表
,同样的,dbh的单例。这很好,但是强制是真正设计为全局的,还没有人编写过“上下文相关强制”,因为没有人真正确定如何编写。(实际上,s/constrations/type constraints/--只要说“这个Str必须是一个有效的列名,定义为这个对象的列HashRef”中的一个条目,就很有用了。)
人们通常使用和/或BUILD
和BUILDARGS
来解决这个问题。你能举一个伪代码的例子来说明你的意思吗?用伪代码更新实际上,这与我想做的非常接近。我只是找不到一个像样的方法,我想。这是每个人都想做的。因为它的基本假设,在当前的类型约束系统中,AFAIK是无法实现的。我接受了这一点——我认为“你不能”这一次是对的,不管它多么令人沮丧。