role R { }
role S does R { }
role T does S { }
my R $r0 = T; # compiles
my R $r1 = role U does R { }; # compiles
my R $r2 = role V does S { }; # compile error:
# Type check failed in assignment to $r2; expected R but got V (V)
Run Code Online (Sandbox Code Playgroud)
任务应该$r2可行吗?
目标是做类似的事情:
my R @r = (
role W does S { ... },
# etc.
);
my %h = @r.map: { .^name => $_ };
Run Code Online (Sandbox Code Playgroud)
是的。
我认为你已经发现了一个错误。
这看起来像是一个与时间相关的问题。如果您V事先定义角色,似乎就没有问题:
role R { }
role S does R { }
role T does S { }
role V does S { }
my R $r0 = T; # compiles
my R $r1 = role U does R { }; # compiles
my R $r2 = V; # compiles
Run Code Online (Sandbox Code Playgroud)
因此,至少作为临时解决方法,我建议您事先定义所有角色。