【问题标题】:Array of enum with a possible variant containing reference [duplicate]枚举数组,其可能变体包含参考 [重复]
【发布时间】:2019-03-14 11:36:24
【问题描述】:

我尝试编写战舰的纸质游戏,其中战场是一个枚举数组。我找不到初始化数组的方法。

enum Tile {
    Water,
    Debris,
    Ship(Rc<Ship>),
}

fn main() {
    let mut a = [[Tile::Water; 10]; 10]; //Tile::Water doesn't implement Copy (the compiler is dumb)
    let mut b: [[Tile; 10]; 10];
    for i in 1..10 {
        for j in 1..10 {
            b[i][j] = Tile::Water;
        }
    } //use of possibly uninitialized b (I'm trying to initialize it)
}

如何做到这一点?我不是为游戏寻找其他解决方案,这只是一个示例。

【问题讨论】:

标签: arrays enums rust


【解决方案1】:

试试这个:

enum Tile {
    Water,
    Debris,
    Ship(Rc<Ship>),
}

impl Default for Tile {
    fn default() -> Self {
        Tile::Water
    }
}

fn main() {
    let mut b: [[Tile; 10]; 10] = Default::default();
}

【讨论】:

  • 您的答案与建议的副本有何不同:stackoverflow.com/questions/28656387/…
  • @hellow 建议的问题通常要求非复制类型。非复制类型通常有充分的理由不“按原样”复制,但只有一些变体持有引用的枚举是一种特殊情况,在许多情况下,复制是安全的。这并不是说这样的枚举应该实现 Copy。编译器不分析是否可以安全地复制有问题的值,并且直接假设它不能。我要求在这种特定情况下解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多