Ошибки при использовании Metamodel :: ConcreteRoleHOW.new_type - PullRequest
5 голосов
/ 12 апреля 2019

Кажется, что нет способа использовать 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 работает сейчас, и он фактически составлен, но составленные роли по-прежнему отображают только ur-роль, Му, а не Iterable, который должен быть добавлен к нему.Есть идеи?

...