gpt4 book ai didi

perl - MooseX::Types 强制转换和 $self

转载 作者:行者123 更新时间:2023-12-01 11:57:48 24 4
gpt4 key购买 nike

有没有办法让 $self 进入 MooseX::Types 强制转换?我在对象中有其他数据,我想使用这些数据将我的强制转换从 String 转换为 Object。或者,有没有像 Class::MOPinitializer 这样的东西允许我这样做——它必须在 类型检查。

请求的伪代码:

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/]} );

在这里,我希望“列”强制转换为 DBCols——DBCol(对象)的 ArrayRef——需要使用 catalogschema col 在类中找到的属性,以及 DBHandle 提供的 dbh/singleton。

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

has 'column_id' => (
isa => Int
, is => 'ro'
, traits => ['DBKey']
, default => 5
, column => 'foo'
);

DBKey 提供的属性 trait column 与上述 columns 一样强制转换为 DBCol会:这需要能够访问类 databaseschematable,以及 dbh .

最佳答案

没有。这很好,但是强制转换实际上是为全局设计的,而且还没有人编写过“上下文相关的强制转换”,因为没有人真正确定如何编写。 (实际上,s/coercions/type constraints/——只说“这个 Str 必须是一个有效的列名,定义为这个对象的 columns HashRef 中的条目”会很有用。)

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

关于perl - MooseX::Types 强制转换和 $self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4473327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com