enums - 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 );
至于我真正希望的:
使用类型对象作为尚未实现的枚举的值。对不起。
解决方案
问题只是最相似的,Int
并且Str
实际上经过了彻底的测试。
例如,Rational
如果您使用它,您的甚至无法正常工作Rat
。
my Rat enum G ( one => 1/1, two => 1/2 );
say one.Rat;
# one
那应该说1
与Int
enums and一致.Int
,并且与Str
enums 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;博士
这是一个错误。(实际上至少有两个)
推荐阅读
- java - Java 启动器
- c - 如果我在 C 中将短数据类型存储为 int 数据类型,则关于 Signextension
- node.js - 通过启动模板在 EC2 上部署 NodeJS 应用程序
- ios - SwiftUI - NavigationView 在屏幕的所有侧面创建空白空间
- java - 导致 Spring 启动错误的可能原因是什么
- javascript - 谷歌脚本 - 跟踪元素
- django - 如何重复显示其他表单/字段
- matlab - 如何在 Matlab 中绘制双曲网格
- conv-neural-network - 在训练 resnet18 模型时,我发现卷积的权重并没有被 tensorboard 改变。如何处理这个问题?
- android - 如何在flutter中实现main.dart中的多个包?