raku 类型枚举不适用于自定义类型

use*_*829 10 enums typed raku

Raku 类型枚举是否应该与自定义类型一起使用?尝试以下操作时出现编译错误:

role A { }
class B does A { }
class C does A { }
my A enum E ( b => B, c => C );
Run Code Online (Sandbox Code Playgroud)

结果是

无法在 Perl6::Metamodel::ParametricRoleGroupHOW 类型的对象上找到方法“mro”

class D { }
my D enum F ( b => D.new, c => D.new );
Run Code Online (Sandbox Code Playgroud)

结果是

无法在设置中为“Int”自动生成原型方法

或者这是否属于

不支持用于生成键值对的复杂表达式。

编辑

关于第一个例子 - 看起来 Raku 不喜欢角色作为类型约束。尝试时给出相同的错误,例如

my Rational enum G ( one => 1/1, two => 1/2 );
Run Code Online (Sandbox Code Playgroud)

至于我真正希望的是:

使用类型对象作为尚未实现的枚举的值。对不起。

Bra*_*ert 5

问题仅此而已IntStr并且实际上经过了彻底的测试。

例如,Rational如果您使用它,您的设备甚至无法正常工作Rat

my Rat enum G ( one => 1/1, two => 1/2 );
say one.Rat;
# one
Run Code Online (Sandbox Code Playgroud)

这应该说1Intenums 和.Int, 以及Strenums 和.Str

my Int enum I ( one-i => 1, two-i => 2 );
my Str enum S ( one-s => 'ONE', two-s => 'TWO' );

say one-i.Int; # 1
say one-s.Str; # ONE
Run Code Online (Sandbox Code Playgroud)

所以这个错误的原因:

无法在设置中为“Int”自动生成原型方法

Rakudo 是否假设除Str枚举之外的任何内容都必须是Int枚举。

它应该做的是生成一个与返回未由枚举装箱的值的类同名的方法。


如果它甚至不能正常工作Rat,它会编译并且是一个内置类型;那么用户定义的就没有机会了。这对角色双重适用。


TL; 博士

这是一个错误。(实际上至少两个)