enums - 如何在 Rust 中定义 "overlapping"枚举?

标签 enums rust

我想要以下两个枚举。但是,由于 LargestMagnitudeSmallestMagnitude 的“重复定义”,以下代码无法编译。

enum SymmetricWhich {
    LargestMagnitude,
    SmallestMagnitude,
    LargestAlgebraic,
    SmallestAlgebraic,
    BothEnds,
}

enum NonsymmetricWhich {
    LargestMagnitude,
    SmallestMagnitude,
    LargestRealPart,
    SmallestRealPart,
    LargestImaginaryPart,
    SmallestImaginaryPart,
}

如何避免这种重复定义?有没有什么方法不需要重命名其中一个枚举值?我考虑了将重复值移动到第三个枚举的可能性(下面给出为 CommonWhich),希望我可以从 is 作为基类“派生”,但我不清楚是否(或者如何)Rust 支持这一点。

enum CommonWhich {
    LargestMagnitude,
    SmallestMagnitude,
}

最好的方法是什么?

最佳答案

目前枚举中没有任何此类子类型;所有变体都属于一种具体类型,您想要做的事情是不可能的。

您需要重命名变体以使它们保持不相交,或者将枚举放置在不同的模块中。

关于enums - 如何在 Rust 中定义 "overlapping"枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226571/

相关文章:

ios - 不初始化引用枚举类型对象

java - 如何在Java中声明和使用静态枚举

rust - 如何在结构的所有生命周期中实现特征?

rust - 为什么创建const指针的集合对 `for val in a.iter()`无效,而对 `a.iter().map(|val| val)`无效?

swift - 不同文件中的两个同名类?

c# - 改变枚举的数量是一个重大变化吗?

ios - 如何使枚举符合 Swift 中的可识别协议(protocol)?

arrays - 初始化固定长度数组的正确方法是什么?

rust - 如何将整数向量与字节相互转换?

rust - HashMap 内部结构错误 : cannot move out of xxx which is behind a shared reference