首页 > 解决方案 > raku 类型的枚举不适用于自定义类型

问题描述

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

role A { }
class B does A { }
class C does A { }
my A enum E ( b => B, c => C );

结果是

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

class D { }
my D enum F ( b => D.new, c => D.new );

结果是

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

还是这属于

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

编辑

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

my Rational enum G ( one => 1/1, two => 1/2 );

至于我真正希望的:

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

标签: enumsrakutyped

解决方案


问题只是最相似的,Int并且Str实际上经过了彻底的测试。

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

my Rat enum G ( one => 1/1, two => 1/2 );
say one.Rat;
# one

那应该说1Intenums and一致.Int,并且与Strenums and一致.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

所以这个错误的原因:

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

是不是 Rakudo 假设除Str枚举之外的任何东西都必须是Int枚举。

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


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


TL;博士

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


推荐阅读