我想构造一个字符串类型的枚举。以下作品:
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
警告询问:
@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)