如何构建一个结构中的字段枚举?

时间:2017-05-31 16:14:44

标签: struct enums casting rust

为什么投射会从借来的内容中移出self

#[derive(Debug)]
enum Foo {
    One = 1,
    Two = 2,
}

struct Bar {
    f: Foo,
}

impl Bar {
    fn bar(&mut self) {
        println!("{:?}", self.f); // "Two"
        println!("{:?}", Foo::Two as u8); // "2"
        println!("{:?}", self.f as u8); // error
    }
}

fn main() {
    Bar{f: Foo::Two}.bar();
}

引发此错误:

error[E0507]: cannot move out of borrowed content
  --> src/main.rs:15:26
   |
15 |         println!("{:?}", self.f as u8); // error
   |                          ^^^^ cannot move out of borrowed content

1 个答案:

答案 0 :(得分:5)

我在官方消息来源中找不到任何关于它的信息,但似乎var constraints = { audio: true, video: true}; navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { var video = document.querySelector('video'); video.srcObject = stream; }).catch(function(err) { console.log('Error in getting stream', err); }); 强制转换具有移动语义,即它们消耗了强制转换对象;考虑这个缩短的案例:

as

在您的情况下,您可以互相借用#[derive(Debug)] enum Foo { Foo1 = 1 } fn main() { let foo = Foo::Foo1; let bar = foo as u8; // the cast moves foo println!("{:?}", bar); // ok println!("{:?}", foo); // error[E0382]: use of moved value: `foo` } ,因此无法使用(即移动);如果您通过派生selfbar(self)将签名更改为Foo或使Clone可复制,则可以使用。