Get an enum field from a struct: cannot move out of borrowed content

后端 未结 1 1721
深忆病人
深忆病人 2021-01-11 19:24

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.

<
相关标签:
1条回答
  • 2021-01-11 20:00

    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 {}
    
    0 讨论(0)
提交回复
热议问题