为什么投射会从借来的内容中移出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
答案 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`
}
,因此无法使用(即移动);如果您通过派生self
和bar(self)
将签名更改为Foo
或使Clone
可复制,则可以使用。