如何读取与 Rust 中的自定义类型关联的枚举值?

2024-04-17

我在 Rust 中有一个实现,如下所示。在主函数中,我正在读取一个值SalaryRange枚举,这将显示High("So High").

// This can be a complex type, just using string for the question 
type SRange = String;
type SalEnu = SalaryRange<SRange>;

struct User<SRange> {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
    income: Income<SRange>,
}

struct Income<SRange> {
    salary_range: SalaryRange<SRange>
}

#[derive(Debug)]
enum SalaryRange<SRange> {
    Low(SRange),
    Mid(SRange),
    High(SRange),
}

fn main() {
    let user1 = User {
        email: String::from("[email protected] /cdn-cgi/l/email-protection"),
        username: String::from("test_name"),
        active: true,
        sign_in_count: 1,
        income: Income {
            salary_range: (
                SalaryRange::High("So High")
            )
        },
    };
    let mut srange: SalaryRange<&str> = user1.income.salary_range;
    println!("{:?}", srange);
}

这个的链接可以在这里找到。

只是想知道是否有可能读取并打印该枚举中的值println!("{:?}", srange::High);,只是为了打印出字符串值? 我只想打印该值So High.

如果我使用srange::High这会抛出一个错误说

      println!("{:?}", srange::High);
|                      ^^^^^^ use of undeclared type or module `srange`
error: aborting due to previous error

您可以在枚举上实现一个方法来提取值:

#[derive(Debug)]
enum SalaryRange<S> {
    Low(S),
    Mid(S),
    High(S),
}

impl<S> SalaryRange<S> {
    fn value(&self) -> &S {
        match self {
            SalaryRange::Low(value) => value,
            SalaryRange::Mid(value) => value,
            SalaryRange::High(value) => value,
        }
    }
}
println!("{:?}", srange.value());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何读取与 Rust 中的自定义类型关联的枚举值? 的相关文章

  • 在 VBA 中使用自定义枚举器实现类似 Python 的生成器

    在VBA中 如果你想要一个可迭代的Range像Python中的对象一样 你可以做类似的事情this https codereview stackexchange com q 60504 146810 然而 这种方法涉及一次性构建整个系列 S
  • Java 枚举和 Switch 语句 - 默认情况?

    对于建议抛出异常的人 抛出异常不会给我带来编译时错误 它会给我带来运行时错误 我知道我可以抛出异常 我宁愿在编译期间死也不愿在运行时死 首先 我使用的是 eclipse 3 4 我有一个数据模型 其模式属性是枚举 enum Mode on
  • 将枚举类型转换为整数,反之亦然[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个枚举 enum MYENUM VAL 1 0 VAL 2 VAL 3 以及两个分别以整数和枚举作为参数的函数 void MyInt
  • 如何使用(不安全)别名?

    Rust 有严格的别名规则 但如果 我知道自己在做什么 我可以解决这些问题吗 我试图将一个 C 函数转换为 Rust 该函数通过从输入缓冲区读取并写入目标缓冲区来执行复杂的操作 但它有一个巧妙的优化 允许输入和输出缓冲区相同 foo src
  • 如何让 Cargo 显示哪些文件导致重建?

    我在用cargo maturin and pytest构建混合 Python Rust 项目 在开发过程中 我经常循环使用命令 cargo test p mypkg release maturin develop release pytho
  • Rust 双与号,&&

    我看到一些代码如下所示 fn test lt a gt a mut a str 我知道 a 是一生 而 是引用 但是我很难理解双重引用 根据我的理解 引用是一个指针 那么 是指向另一个指针还是其他指针的指针 根据我的理解 引用是一个指针 是
  • 比较枚举的最佳方法[重复]

    这个问题在这里已经有答案了 例如 我有一个枚举enum Color Red Brown 我还有一些该类型的变量 Color c1 Brown c2 Red 与恒定值进行比较的最佳方法是什么 if c1 Color Brown is brow
  • 货运公司如何决定是否重建部门?

    我正在考虑跳过货物中的依赖关系构建步骤 我有一个简单的项目 使用 3 个板条箱作为依赖项 在Cargo toml 我使用一次构建项目cargo build release 现在我有另一个项目 它使用其中提到的相同依赖项Cargo toml文
  • Java Enum 与 C++ 和其他传统 Enum 有何不同?

    我们从 java 1 5 获得的枚举与 C 和其他传统枚举类型有何不同 在 Java 中 枚举是复杂的对象 而在 C 中 每个枚举对象都与单个整数值相关联 在 java 中 您可以将多个属性与单个枚举值关联 enum MyCategory
  • 为什么枚举可以有包私有构造函数?

    既然枚举构造函数只能由其常量调用 为什么允许它是包私有的呢 构造函数实际上不是包私有的 它是隐式的private接口方法的隐式方式public即使您不添加关键字 JLS 的相关部分 8 8 3 http docs oracle com ja
  • 如何限制打字稿中的枚举字符串值

    我有具有可能的行动价值的类型 type PersistentAction park retry skip stop 然后我想用动作定义枚举 enum persistentActions PARK park RETRY retry SKIP
  • 什么是构建依赖项?

    构建依赖关系 中解释货物簿 https doc rust lang org cargo reference specifying dependencies html build dependencies 您可以依赖其他基于 Cargo 的板
  • 如何操作 Rust 数组的 2 个可变切片?

    我有一个函数需要对单个数组的两个部分进行操作 目的是能够建立一个 nostd 分配器 可以将更大数组的变量切片返回给调用者 并保留数组的其余部分以供将来分配 这是失败的示例代码 fn split lt a gt mut item a mut
  • 枚举类型的命名空间 - 最佳实践

    通常 需要同时使用多种枚举类型 有时 人们会发生名字冲突 我想到了两种解决方案 使用命名空间 或使用 更大的 枚举元素名称 尽管如此 命名空间解决方案有两种可能的实现 带有嵌套枚举的虚拟类 或完整的命名空间 我正在寻找所有三种方法的优缺点
  • 如何根据操作系统系列拥有不同的依赖关系

    我正在编写一个跨平台库 它具有特定于平台的依赖关系 一个用于类 UNIX 平台 一个用于 Windows 这些板条箱仅在特定平台上编译 因此我不能正常地将它们全部添加到依赖项下 在我实际使用的 Rust 代码中cfg属性 例如 cfg un
  • 将 Rust 应用程序从 macOS 交叉编译到 Raspberry Pi 2 时,“与arm-linux-gnueabihf-gcc 链接失败”

    我想将 macOS 上的 Rust 应用程序交叉编译到 Raspberry Pi 2 我进行了很多搜索 但没有找到可行的解决方案 我尝试的最后一个解决方案是遵循这个answer https stackoverflow com questio
  • 如何使用相同的可变借用调用 serde_json::to_writer 两次?

    我正在尝试编写一个调用的函数serde json to writer https docs serde rs serde json ser fn to writer html两次写两件事 但我不知道如何写 这是一次尝试 extern cra
  • 无法启动客户端 Rust 语言服务器

    我正在尝试弄清楚如何使用 WSL 中的 rustc 和 Cargo 我使用 VS Code 和 Rust rls 插件 可以编译我的代码 但 RLS 存在问题 无法启动客户端 Rust 语言服务器 Rustup 不可用 安装自https w
  • 如何在 ActiveAdmin 中正确配置 Rails 4.1 枚举

    我有一个 Rails 4 1 应用程序 其中使用枚举来表示对象的隐私级别 在我的架构中 t integer privacy level default 0 在我的模型中 enum privacy level privacy private
  • 将实现拆分到多个文件/模块,并尽可能保持所有内容的私密性

    考虑我的库中的以下代码 pub struct Foo impl Foo fn helper self pub fn do something foo Foo foo helper 我的图书馆的用户应该能够使用Foo and do somet

随机推荐