从结构中获取枚举字段:无法移出借用的内容 [英] Get an enum field from a struct: cannot move out of borrowed content

查看:43
本文介绍了从结构中获取枚举字段:无法移出借用的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Rust 的新手,并试图围绕所有权/借用概念进行思考.现在我已将我的代码简化为这个会出现编译错误的最小代码示例.

pub struct Display {颜色:颜色,}酒吧枚举颜色{蓝色 = 0x1,红色 = 0x4,}impl 显示 {fn get_color_value(&self) ->u16{self.color 为 u16}}

<块引用>

src/display.rs:12:9: 12:13 错误:无法移出借来的内容src/display.rs:12 self.color 作为 u16^~~~错误:由于先前的错误而中止无法编译.

我仍然处于一切都是按价值复制的心态,在这种情况下,执行 self.color 是完全合法的,因为这会给我一份 颜色.显然,我错了.我在 SO 上发现了一些关于相同错误的其他问题,但没有解决我的问题.

据我所知,该字段由拥有 Display 的任何人拥有.因为我只借了一个对 Display 的引用,我不拥有它.提取 color 尝试转移所有权Color 对我来说是不可能的,因为我不拥有 Display.这是正确的吗?

我该如何解决?

解决方案

我仍然处于一切都被价值思维复制的状态,它在哪里做 self.color 是完全合法的,因为这会给我一份 Color 的副本.显然,我错了.我发现了一些关于这个的其他问题SO 上的错误,但没有解决我的问题.

任何可以在 rust 中复制的东西都必须明确地带有 Copy 特性.Copy 过去是隐式的,但已更改(rfc).

<块引用>

据我所知,该领域归拥有显示器的任何人所有.由于我只是借用了对 Display 的引用,因此我不拥有它.提取颜色尝试将颜色的所有权转让给我,这是不可能的,因为我不拥有显示器.这是正确的吗?

是的.当您遇到此错误时,有三种可能的解决方案:

  • 为类型派生特征Copy(如果适用)
  • 使用/派生Clone (self.color.clone())
  • 返回参考

为了解决这个问题,你为 Color 派生了 Copy:

#[derive(Copy, Clone)]酒吧枚举颜色{蓝色 = 0x1,红色 = 0x4,}

这与:

impl Copy for Color {}

I'm new to Rust and trying to wrap my head around the ownership/borrowing concept. Now I have reduced my code to this minimal code sample that gives a compile error.

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.

I'm still in the everything is copied by value mindset, where it is perfectly legal to do self.color as that would get me a copy of Color. Apparently, I am wrong. I found some other questions about this same error on SO, but no solution to my issue.

As I understand it, the field is owned by whomever owns the Display. Since I only borrowed a reference to the Display, I don't own it. Extracting color attempts to transfer ownership of the Color to me, which is not possible since I don't own the Display. Is this correct?

How do I solve it?

解决方案

I'm still in the everything is copied by value mindset, where it is perfectly legal to do self.color as that would get me a copy of Color. Apparently, I am wrong. I found some other questions about this same error on SO, but no solution to my issue.

Anything that can be copied in rust must be explicitly mared with a trait Copy. Copy was implicit in the past but that was changed (rfc).

As I understand it, the field is owned by whomever owns the Display. Since I only borrowed a reference to the Display, I don't own it. Extracting color attempts to transfer ownership of the Color to me, which is not possible since I don't own the Display. Is this correct?

Yes. When you encounter this error there are three possible solutions:

  • Derive the trait Copy for the type (if appropriate)
  • Use/derive Clone (self.color.clone())
  • Return a reference

To solve this you derive Copy for Color:

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

This is the same as:

impl Copy for Color {}

这篇关于从结构中获取枚举字段:无法移出借用的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆