Dan*_*ker 9 rust borrow-checker
我是Rust的新手,并试图围绕所有权/借款概念.现在我已经将代码缩减到这个给出编译错误的最小代码示例.
pub struct Display {
color: Color,
}
pub enum Color {
Blue = 0x1,
Red = 0x4,
}
impl Display {
fn get_color_value(&self) -> u16 {
self.color as u16
}
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)src/display.rs:12:9: 12:13 error: cannot move out of borrowed content src/display.rs:12 self.color as u16 ^~~~ error: aborting due to previous error Could not compile.
我仍然在所有的东西都被价值心态所复制,在那里它完全合法,self.color因为那会得到我的副本Color.显然,我错了.我在SO上发现了一些关于同样错误的其他问题,但没有解决我的问题.
据我了解,该领域由拥有者的所有者拥有Display.由于我只借用了一个参考Display,我不拥有它.提取color转移Color给我的所有权的尝试,这是不可能的,因为我没有拥有Display.它是否正确?
我该如何解决?
Arj*_*jan 11
我仍然在所有的东西被价值心态复制,在那里做self.color是完全合法的,因为这会得到我的Color副本.显然,我错了.我在SO上发现了一些关于同样错误的其他问题,但没有解决我的问题.
任何可以在铁锈中复制的东西都必须明确地与特征混合Copy.Copy在过去是隐含的但是改变了(rfc).
据我了解,该领域由拥有显示器的任何人拥有.由于我只借用了显示器的引用,我不拥有它.提取颜色尝试将颜色的所有权转移给我,这是不可能的,因为我没有显示.它是否正确?
是.遇到此错误时,有三种可能的解决方案:
Copy类型的特征(如果适用)Clone(self.color.clone())为了解决这个问题,你得到Copy的Color:
#[derive(Copy, Clone)]
pub enum Color {
Blue = 0x1,
Red = 0x4,
}
Run Code Online (Sandbox Code Playgroud)
这与:
impl Copy for Color {}
Run Code Online (Sandbox Code Playgroud)