Есть ли способ заставить $self
принуждение MooseX::Types
? У меня есть другие данные в объекте, которые я хочу использовать, чтобы увеличить свое принуждение от String
до 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/]} );
Здесь я хочу, чтобы «столбцы» приводились к DBCols
- ArrayRef из DBCol (объектов) - требующих использования атрибутов catalog
, schema
и col
, найденных в классе, и с dbh / singleton, предоставленным DBHandle
.
Чтобы сделать это менее псевдо, на самом деле ситуация только немного сложнее. Я смог выполнить вышеупомянутое с помощью around
, теперь я хочу создать черту атрибута, которая позволила бы этот синтаксис:
has 'column_id' => (
isa => Int
, is => 'ro'
, traits => ['DBKey']
, default => 5
, column => 'foo'
);
Если признак атрибута column
, предоставленный DBKey
, приводит к DBCol
так же, как и приведенный выше columns
: для этого потребуется возможность доступа к классам database
, schema
, table
, и снова синглтон для dbh
.