Ошибки при использовании 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 который должен быть добавлен к нему. Любая идея?

0 ответов

Другие вопросы по тегам