【问题标题】:raku typed enums not working with custom typesraku 类型的枚举不适用于自定义类型
【发布时间】:2021-09-07 05:07:38
【问题描述】:

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 );

至于我真正希望的是什么:

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

【问题讨论】:

  • This link says "所有的键必须是同一类型"。我不是 Raku 专家,所以我不确定这是否是问题所在,但似乎有可能?

标签: enums raku typed


【解决方案1】:

问题最像只有IntStr 实际经过彻底测试。

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

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

应该说1Int 枚举和.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”自动生成原型方法

Rakudo 是否假定除了 Str 枚举之外的任何东西都必须是 Int 枚举。

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


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


TL;DR

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

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多