使用Metamodel :: ConcreteRoleHOW.new_type时出错

时间:2019-04-12 16:30:31

标签: perl6 nqp

在MetamodelConcreteRoleHOW中似乎没有使用new_type的方法,顾名思义,该方法应用于创建Role的新实例。主要问题是签名(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现在可以工作了,实际上已经组成了,但是组成的角色仍然只显示ur角色Mu,而不显示应该添加到其中的Iterable。有想法吗?

0 个答案:

没有答案