gpt4 book ai didi

metaprogramming - 如何使用元编程在 Perl 6 中创建枚举?

转载 作者:行者123 更新时间:2023-12-04 12:04:08 25 4
gpt4 key购买 nike

给定表示枚举的数据,例如:

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

Timo 的 ADT 库给出了如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com