You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Z=>结合变量构造Raku字符串类型枚举?

Raku字符串类型枚举构造问题

正常运行的写法

直接使用字面量序列构造字符串枚举可正常执行:

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

输出结果:

("c", "three", "a", "one", "b", "two").Seq

无法运行的写法

使用普通数组变量构造枚举会触发报错:

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

报错信息:

No values supplied to enum (does @a Z=> @b need to be declared constant?)

测试性尝试的写法

使用标量变量展开构造,结果不符合预期:

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

输出结果:

("", "").Seq

问题说明

这种用普通变量构造枚举的方式确实不被支持。核心原因是Raku的枚举定义要求初始化参数必须是编译时常量:枚举的成员结构与值需要在编译阶段就确定,而my声明的普通变量要到运行阶段才会被赋值,编译阶段这些变量还没有有效数据,因此无法用来构造枚举。

如果要通过变量实现类似需求,需将变量声明为constant,确保其值在编译阶段就被确定,示例如下:

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

执行后会得到与第一个示例一致的输出。

内容的提问来源于stack exchange,提问作者zjmarlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:10:30