Raku类型枚举与自定义类型无法正常工作

10

当使用自定义类型时,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'的proto方法。

或者这是否属于

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

编辑

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

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

至于我真正希望的是:

目前还没有实现将类型对象用作枚举值。抱歉。


这个链接说:“所有键必须是相同的类型”。我不是Raku专家,所以我不能确定这是否是问题,但似乎很可能是? - Dan Bron
1个回答

5
问题在于只有IntStr得到了彻底的测试。
例如,如果您使用Rat而不是Rational,则后者甚至无法正常工作。
my Rat enum G ( one => 1/1, two => 1/2 );
say one.Rat;
# one

应该改为1以保持与Int枚举和.Int的一致性,以及与Str枚举和.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'自动生成proto方法

Rakudo认为除了Str枚举之外的任何东西都必须是Int枚举。

它应该生成一个与类名相同的方法,返回一个没有被枚举盒化的值。


如果甚至对于编译并且是内置类型的Rat也不能正常工作,那么用户定义的类型就毫无机会了。对于角色来说更是如此。


简短概括:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接