如何在 Rust 中创建具有常量值的枚举?

2024-02-21

我可以做这个:

enum MyEnum {
    A(i32),
    B(i32),
}

但不是这个:

enum MyEnum {
    A(123), // 123 is a constant
    B(456), // 456 is a constant
}

我可以创建结构A and B使用单个字段,然后实现该字段,但我认为可能有一种更简单的方法。有没有?


回答这个问题的最好方法是弄清楚为什么你想要枚举中的常量:你是否将一个值与每个变体相关联,或者你希望每个变体be该值(例如enum在 C 或 C++ 中)?

对于第一种情况,只保留没有数据的枚举变量并创建一个函数可能更有意义:

enum MyEnum {
    A,
    B,
}

impl MyEnum {
    fn value(&self) -> i32 {
        match *self {
            MyEnum::A => 123,
            MyEnum::B => 456,
        }
    }
}
// call like some_myenum_value.value()

这种方法可以多次应用,将许多单独的信息与每个变体相关联,例如也许你想要一个.name() -> &'static str方法也。将来,这些功能甚至可以标记为const功能。

对于第二种情况,您可以指定显式的整数标记值,就像 C/C++ 一样:

enum MyEnum {
    A = 123,
    B = 456,
}

这可以是matched以所有相同的方式打开,但也可以转换为整数MyEnum::A as i32。 (请注意,像这样的计算MyEnum::A | MyEnum::B在 Rust 中并不自动合法:枚举具有特定值,它们不是位标志。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Rust 中创建具有常量值的枚举? 的相关文章

随机推荐

  • 更新 Azure API 管理配置

    我们正在使用 Azure API 管理向客户公开我们的服务 为了创建新的 API 我们为我们的服务导入 swagger 文件 如果我们重新导入 swagger Azure API 管理是否会删除并重新创建 API 另外 现有客户在 swag
  • 动态插入变量表语句 SQL Server

    我有一个变量表 DECLARE A Table TABLE ID INT att1 VARCHAR 100 att2 nvarchar 200 我想制作动态sql 所以我向该表中插入一些数据 全部在循环内 WHILE i lt 100 BE
  • 更改 ?selectableItemBackgroundBorderless 波纹颜色

    我正在尝试使用 selectableItemBackgroundBorderless创造无边界的涟漪LinearLayout 它工作正常 但不清晰可见 如何更改默认颜色 selectableItemBackgroundBorderless使
  • 未捕获(承诺中)错误:提供的权重数据没有目标变量:block1_conv1_2/kernel

    我是机器学习的新手 我正在关注这个blog https github com vbookshelf Skin Lesion Analyzer blob master skin lesion analyzer jupyter notebook
  • 使用 fastAPI 将嵌套模式插入数据库?

    我最近开始了解 fastAPI 并通过教程和其他文档进行了工作 尽管 fastAPI 有很好的文档记录 但我找不到有关如何在使用数据库时处理嵌套输入的信息 为了测试 我写了一个非常小的family有两种模型的 API class Membe
  • 在 Spring 中使用属性文件 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 Spring 框架的新手 在我的 Spring 应用程序中 有一些详细信息如下 这些详细信息需要在属性文件中维护 Transac
  • 使用 libwireshark 以编程方式获取 Wireshark 功能

    如果我想编写一个使用 Wireshark 功能的脚本 我会使用 tshark 我听说还有一个 libwireshark 可以在用 C 编写程序时使用 但是我一生都找不到any其文档 我尝试隔离wireshark源树中的库代码 但似乎代码组织
  • 如何在 linux-64 上安装 Anaconda Python 3.5 的图形工具?

    我正在尝试在 Ubuntu 14 04 x64 上安装 Anaconda Python 3 5 的图形工具 但事实证明这是一个真正的技巧 I tried 这种方法 https stackoverflow com questions 3222
  • Webpack V4:使用 Webpack 和 Uglify 删除 console.logs

    这个答案以前就像一个魅力 https stackoverflow com a 41041580 3894981 https stackoverflow com a 41041580 3894981 然而 从 Webpack v4 开始 它不
  • YamlDotNet !!二进制类型

    我正在尝试使用 yaml 发送二进制数据 即字节数组 根据yaml文档 Yaml 二进制类型 http yaml org type binary html 这是支持的 在 Java 端 我使用 SnakeYaml 如果传递了 byte 值
  • 滚动不适用于 CoordinatorLayout + 视差图像 + BottomSheetLayout

    介绍 我有一个活动 它使用视差标题图像和滚动内容来实现通用模式CoordinatorLayout AppBarLayout and CollapsingToolbarLayout 我的 xml 布局如下所示
  • Yocto Bitbake Glibc 构建失败

    我正在尝试构建 Yocto 映像 但编译 glibc 时构建失败 如果我只跑 bitbake glibc c compile 我收到编译错误如下 usr src debug glibc 2 27 r0 git nptl pthread at
  • 如何将 git 存储库的一部分提取到它自己的存储库中,同时保留历史记录和文件结构?

    我有一个大型 git 存储库 其文件夹结构如下 A B C D 我想将 A 和 B 文件夹提取到它们自己的存储库中 同时维护历史记录 我只关心主分支 因此 新的存储库将如下所示 A B 我怎样才能做到这一点 我发现 git filter b
  • 无法理解列表推导式

    我刚刚开始学习 haskell 字面意思是今晚 并且我在理解列表理解的逻辑时遇到了一些困难 更具体地说是 lt 操作员 一个小例子学习一些 Haskell http learnyouahaskell com starting out查找长度
  • 简单的 Java 按钮来显示圆

    我目前正在学习java 我理解除图形之外的概念 作为程序员 这对我来说是全新的 坦白说 它让我不知所措 理论上 我的示例应该在按下按钮时显示一个圆圈 使用打印方法进行调试 我不断发现 Button 正确调用了所有方法并创建了一个新的 Cir
  • 从Java中的mimepart获取图像的base64内容字符串

    我正在尝试获取 MimeMultiPart 中 MimePart 的 base64 内容 但我在使用 Javamail 包时遇到了困难 我只是想要某个内联图像的 base64 编码字符串 但似乎没有一种简单的方法可以做到这一点 我写了一个方
  • AngularJS:如何从控制器功能切换视图?

    我正在尝试使用ng clickAngularJS 的切换视图功能 我将如何使用下面的代码来做到这一点 索引 html div div click me div div 控制器 js function Cntrl scope scope so
  • 打击存在不起作用

    实际上我使用 smack API 编写了一个 IM 服务 继承了 google chat 但是当我想打印好友列表及其存在时 编译模式显示所有存在不可用 但在调试模式下它显示真正的可用性 我的代码是 1 创建连接 public boolean
  • 使用 Chart.js 绘制条形图的 X 轴多色标签

    我需要不同颜色的 x 轴标签 我使用 chart js 我尝试了下面的代码 但它不起作用 只显示单色 scales xAxes ticks fontColor rgba 245 88 97 1 rgba 245 88 97 1 rgba 2
  • 如何在 Rust 中创建具有常量值的枚举?

    我可以做这个 enum MyEnum A i32 B i32 但不是这个 enum MyEnum A 123 123 is a constant B 456 456 is a constant 我可以创建结构A and B使用单个字段 然后