我是Rust的新手,所以我仍然試圖習慣這種語言的內存模型。在結構上使用getter方法生鏽的借位問題
因此,當我在結構上構建getter
方法時,我遇到了錯誤cannot move out of borrowed content.
。我無法弄清楚它爲什麼會出現,但它似乎與Enum上的某些特徵有關。
enum Gender{
Male,
Female,
}
impl Default for Gender {
fn default() -> Gender { Gender::Female }
}
impl Clone for Gender {
fn clone(&self) -> Gender { *self }
}
#[derive(Default, Builder, Debug)]
#[builder(setter(into))]
struct ProfessorGroup {
name: &'static str,
gender:Gender,
level:Levels,
attrition_rate:f64,
promotion_rate:f64,
hiring_rate:f64,
current_number:u32,
}
impl ProfessorGroup {
pub fn get_gender(&self) -> Gender { self.gender }
pub fn get_name(&self) -> &'static str {self.name}
pub fn get_attrition_rate(&self) -> f64 {self.attrition_rate}
我收到的錯誤消息必須與性別Enum
。
error[E0507]: cannot move out of borrowed content
--> src/Actors/ProfessorGroups.rs:42:33
42 | pub fn get_gender(&self) -> Gender { self.gender }
| ^^^^ cannot move out of borrowed content
error[E0507]: cannot move out of borrowed content
--> src/Actors/ProfessorGroups.rs:27:33
|
27 | fn clone(&self) -> Levels { *self }
| ^^^^^ cannot move out of borrowed content
我確定要引用自我。我也沒有在這些函數中進行任何賦值 - 只是getter函數 - 但不知何故借用變得混亂了。
啊這是有道理的。我明白爲什麼吸氣功能仍被視爲借用。感謝複製,克隆特質的提示。這是一個非常有用的提示,因爲它看起來相當於按值傳遞/返回而不是通過引用。我很欣賞Rust在內存模型方面的明確解釋。 – krishnab