是否可以用另一个变体引用自身的枚举变体?

Joh*_*ton 2 rust

是否可以通过 Rust 中同一枚举的另一个变体来引用枚举的变体?

一些想象的代码:

enum Message{
   Text(String),
   Secret(Self::Text)
}
Run Code Online (Sandbox Code Playgroud)

cam*_*024 6

不幸的是,你不能。Message是一种类型,但Message::Text不是,并且不能在使用类型的地方使用。

在这种情况下,简单的解决方案就是只Secret持有String. 但是,假设您的实际用例有点复杂,一般策略是将其拉出到另一个结构中:

enum Message {
  Text(MessageData),
  Secret(MessageData),
}

struct MessageData {
  foo: Bar,
  // lots of other fields
}

Run Code Online (Sandbox Code Playgroud)