可以在枚举类型上使用特征吗?

时间:2018-07-28 01:41:32

标签: enums rust traits

我通读了trait documentation,发现了一个在结构上使用特征的简洁定义。是否可以在enum类型上使用特征?我看到的答案说不,但是他们已经3岁了,还没有完全按照我的意愿去做。

我试图这样做:

#[derive(Debug, Copy, Clone)]
pub enum SceneType {
    Cutscene,
    Game,
    Menu,
    Pause,
    Credits,
    Exit,
}

//We want to guarantee every SceneType can be played statically
trait Playable {
    fn play();
}

impl Playable for SceneType::Cutscene {
    fn play() {}
}
error[E0573]: expected type, found variant `SceneType::Cutscene`
  --> src/main.rs:16:19
   |
16 | impl Playable for SceneType::Cutscene {
   |                   ^^^^^^^^^^^^^^^^^^^
   |                   |
   |                   not a type
   |                   help: you can try using the variant's enum: `SceneType`

我不明白此错误,因为它引用的枚举在同一文件中。如果我真的不能在枚举变量上使用特征,有什么办法可以保证任何枚举特征必须实现某些方法?

1 个答案:

答案 0 :(得分:3)

  

特征可以用于枚举类型吗?

。实际上,您已经为枚举定义了多个特征。特征DebugCopyClone

#[derive(Debug, Copy, Clone)]
pub enum SceneType

问题是您没有尝试为您的枚举实现Playable,而是试图为枚举的变体之一实现它。枚举变体不是类型

错误消息告诉您:

  
help: you can try using the variant's enum: `SceneType`
impl Playable for SceneType {
    fn play() {}
}

另请参阅: