我对 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
    }
}
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.

我仍然保持着everything is copied by value的心态,做self.color是完全合法的,因为那样我就可以得到Color的副本.显然,我错了.我发现了一些关于同样错误的其他问题,但没有解决我的问题.

据我所知,这片土地归Display人所有.因为我只借了一本书

我该怎么解决呢?

推荐答案

我仍然处于一种"一切都是按价值观复制"的心态中

任何可以在 rust 迹中复制的东西都必须明确地刻上特征Copy.Copy在过go 是含蓄的,但现在改变了(rfc).

据我所知,这片场地归谁所有.

对遇到此错误时,有三种可能的解决方案:

  • 导出类型的特征Copy(如果合适)
  • 使用/派生Clone(self.color.clone())
  • 返回推荐信

要解决这个问题,你可以推导出ColorCopy:

#[derive(Copy, Clone)]
pub enum Color {
    Blue         = 0x1,
    Red          = 0x4,
}

这与:

impl Copy for Color {}

Rust相关问答推荐

as操作符如何将enum转换为int?

有没有方法处理rust中嵌套的ok_or()?

在HashMap中插入Vacant条目的可变借位问题

为什么对不可复制数据的引用的取消引用没有O权限来避免Rust中的双重释放?

为什么幻影数据不能自动推断?

交叉术语未正确清除屏幕

使用模块中的所有模块,但不包括特定模块

如何使用syn插入 comments ?

当一个箱子有自己的依赖关系时,两个人如何克服S每箱1库+n箱的限制?

在Rust中,在实现特征`Display`时,如何获取调用方指定的格式?

无法将记录器向下转换回原始 struct

铁 rust ,我的模块介绍突然遇到了一个问题

在Rust中,Box:ed struct 与普通 struct 在删除顺序上有区别吗?

链表堆栈溢出

try 实现线程安全的缓存

‘&T as *const T as *mut T’ 在 ‘static mut’ 项目中合适吗?

使用 HashMap 条目时如何避免字符串键的短暂克隆?

编写 TOML 文件以反序列化为 struct 中的枚举

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?

如何在 Rust 中构建一个 str