5

在 MetamodelConcreteRoleHOW中似乎没有使用new_type的方法,顾名思义,它应该用于创建角色的新实例。主要问题是当您尝试混合新角色时,正如签名 ( 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. 其次,正如 Raiph 所说,您实际上必须使用 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现在工作了,它实际上是组合的,但组合的角色仍然只显示你的角色 Mu,而不是Iterable应该添加到它的角色。任何想法?

4

0 回答 0