使用 Z=> 和变量而不是列表文字构造枚举

use*_*829 9 enums raku

我想构造一个字符串类型的枚举。以下作品:

my Str enum E ( <a b c> Z=> 'one', 'two', 'three' );
E.kv.raku.say;
Run Code Online (Sandbox Code Playgroud)

(“c”、“三”、“a”、“一”、“b”、“二”).Seq

但是,尝试以下方法不会:

my Str @a = <a b c>;
my Str @b = <one two three>;
my Str enum F ( @a Z=> @b );
F.kv.raku.say;
Run Code Online (Sandbox Code Playgroud)

没有向枚举提供值(@a Z=> @b 需要声明为常量吗?)

这是不支持的吗?

Raku/roast 涵盖了枚举结构,E但我没有看到F.

出于好奇,我也尝试了一下:

my $a = <a b c>;
my $b = <one two three>;
my Str enum G ( $a<> Z=> $b<>.map( { .Str } ) );
G.kv.raku.say;
Run Code Online (Sandbox Code Playgroud)

("", "").Seq

Jon*_*ton 9

警告询问:

@a Z=> @b 需要声明为常量吗

这是正确的;由于 anenum是编译时声明,因此涉及计算其键和值的所有内容都必须在编译时可用。声明@aand @bas constants 可以解决问题。因此:

my constant @a = <a b c>;
my constant @b = <one two three>;
my Str enum F ( @a Z=> @b );
F.kv.raku.say;
Run Code Online (Sandbox Code Playgroud)

生产:

("a", "one", "c", "three", "b", "two").Seq
Run Code Online (Sandbox Code Playgroud)