角色约束变量不接受内联定义的派生角色

use*_*829 10 raku

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)

Eli*_*sen 7

是的。

我认为你已经发现了一个错误。

这看起来像是一个与时间相关的问题。如果您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)

因此,至少作为临时解决方法,我建议您事先定义所有角色。