Ошибки при использовании Metamodel::ConcreteRoleHOW.new_type
Кажется, нет способа использовать new_type в MetamodelConcreteRoleHOW, который, как следует из его названия, должен использоваться для создания новых экземпляров роли. Основная проблема заключается в том, что при попытке добавить новые роли, как это следует из подписи (method new_type(:@roles, :$name = '<anon>', :$ver, :$auth, :$repr, :$api)
):
my $a = Metamodel::ConcreteRoleHOW.new_type(name => "Bar", roles => [Iterable]);
$a.^compose;
say $a.^roles;
# Error: «Cannot iterate object with P6opaque representation (Array)
Используя другой Positional
, список, дает другую ошибку:
my $a = Metamodel::ConcreteRoleHOW.new_type(name => "Bar", roles => (Iterable));
$a.^compose;
say $a.^roles
# « Cannot iterate over a Iterable type object»
Бьет меня, какой позиционный я мог бы использовать там. Конечно, это реализовано в NQP, поэтому, возможно, мне следует определить массив NQP. Но я действительно понятия не имею. Любая помощь будет оценена.
Редактировать Во-первых, ошибка происходит, когда вы звоните compose
, Во-вторых, вам действительно нужно использовать массив NQP, как говорит Райф
use nqp;
my $roles := nqp::list(Iterable);
my $a = Metamodel::ConcreteRoleHOW.new_type(name => "Bar", roles => $roles);
$a.^compose;
say $a.^is_composed();
say $a.^roles # OUTPUT: «1(Mu)»
compose
работает сейчас, и он на самом деле составлен, но составленные роли по-прежнему показывают только свою роль, Му, а не Iterable
который должен быть добавлен к нему. Любая идея?