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)
至于我真正希望的是:
使用类型对象作为尚未实现的枚举的值。对不起。
问题仅此而已Int,Str并且实际上经过了彻底的测试。
例如,Rational如果您使用它,您的设备甚至无法正常工作Rat。
my Rat enum G ( one => 1/1, two => 1/2 );
say one.Rat;
# one
Run Code Online (Sandbox Code Playgroud)
这应该说1与Intenums 和.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,它会编译并且是一个内置类型;那么用户定义的就没有机会了。这对角色双重适用。
这是一个错误。(实际上至少两个)