作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定表示枚举的数据,例如:
my %enums := {
Color => { red => 0, black => 1, green => 2 },
Status => { fail => 0, pass => 1 }
};
Metamodel::ClassHOW
创建等效于的枚举:
enum Color ( red => 0, black => 1, green => 2 );
enum Status ( fail => 0, pass => 1 );
ClassHOW
创建类的示例。 ,但不包括枚举:
https://github.com/timo/ADT/blob/master/lib/ADT.pm6
最佳答案
这似乎可以解决问题,但它大多未经测试:
my %enums := {
Color => { red => 0, black => 1, green => 2 },
Status => { fail => 0, pass => 1 }
};
my @types = gather {
for %enums.kv -> $name, %values {
my $type = Metamodel::EnumHOW.new_type(:$name, base_type => Int);
for %values -> $pair {
$type.^add_enum_value($pair);
}
$type.^add_role(Enumeration);
$type.^add_role(NumericEnumeration);
$type.^compose;
take $type;
}
}.list;
say @types; # Output: [(Status) (Color)]
enum Color ...
那样声明它们。 .
关于metaprogramming - 如何使用元编程在 Perl 6 中创建枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47033465/
我是一名优秀的程序员,十分优秀!