【问题标题】:How can I define "overlapping" enums in Rust?如何在 Rust 中定义“重叠”枚举?
【发布时间】:2014-08-10 07:43:11
【问题描述】:

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

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

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

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

enum CommonWhich {
    LargestMagnitude,
    SmallestMagnitude,
}

最好的方法是什么?

【问题讨论】:

  • @dbaupp 我真正的问题是如何避免重复定义;扩展枚举是我尝试的解决方案。 ChrisMorgan 在下面回答了我——最好的方法是将每个枚举放在一个单独的模块中。

标签: enums rust


【解决方案1】:

目前在枚举中没有任何这样的子类型;所有变体都只是一种具体类型,而您尝试做的事情是不可能的。

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

【讨论】:

  • 感谢@ChrisMorgan,将每个枚举放在自己的子模块中正是我需要做的。
  • 这不再是问题,因为枚举现在已命名空间。
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2021-01-04
  • 1970-01-01
相关资源
最近更新 更多