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

如何在Raku中以编程方式获取枚举的所有可能值?

如何在Raku中以编程方式获取枚举的所有可能值?

嗨,我之前也碰到过和你一样的困扰——不想手动重复写枚举的成员列表,想通过代码动态获取所有可能的枚举值。你提到的.enums方法确实只返回一个Map,键是成员的字符串名称,值是它们对应的底层数值(因为默认是整数枚举),这显然不是你需要的枚举值本身。不过Raku的枚举类型通过元类方法提供了完美的解决方案:

  • 如果你需要实际的枚举成员对象(比如Direction::north这种可以直接使用的枚举值实例),直接调用枚举类型的.^values方法就可以:

    enum Direction <north east south west>;
    
    # 动态获取所有枚举值并遍历
    for Direction.^values -> $dir {
        say $dir;  # 会依次输出 north、east、south、west
        # 要是需要访问对应的底层数值,还可以写:say $dir.value;
    }
    
  • 如果你只是需要枚举成员的字符串名称,那Direction.enums.keys就能拿到("north", "east", "south", "west")这个列表;如果之后要把名称转换成对应的枚举对象,用::($name)就能实现:

    for Direction.enums.keys -> $name {
        my $dir = ::($name);
        say $dir;
    }
    

另外还有个等价的元类方法.^enum-members,它返回的也是所有枚举成员对象的列表,用法和.^values完全一致,比如:

for Direction.^enum-members -> $dir {
    say $dir;
}

这两种方法都能帮你彻底摆脱手动重复枚举成员的麻烦,完全动态获取所有可能的枚举值~

备注:内容来源于stack exchange,提问作者mscha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:17:58