【发布时间】:2016-02-14 10:14:10
【问题描述】:
我正在编写一个非常简单的 getter/setting 模型,为了简单起见,我想在 Rust 中使用 struct 和 impl。
struct Person {
firstName: String,
lastName: String,
}
impl Person {
fn get_first_name(&mut self) -> String { return self.firstName; }
fn get_last_name(&mut self) -> String { return self.lastName; }
fn set_first_name(&mut self, x: String) { self.firstName = x; }
fn set_last_name(&mut self, x: String) { self.lastName = x; }
fn default() -> Person {
Person {firstName: "".to_string(), lastName: "".to_string()}
}
}
fn main() {
let mut my_person : Person = Person{ ..Person::default() };
my_person.set_first_name("John".to_string());
my_person.set_last_name("Doe".to_string());
println!("{}", my_person.firstName);
println!("{}", my_person.lastName);
}
当我运行这个 sn-p 时,我收到以下错误。
src\main.rs:7:53: 7:57 error: cannot move out of borrowed content [E0507]
src\main.rs:7 fn get_first_name(&mut self) -> String { return self.firstName; }
^~~~
src\main.rs:8:53: 8:57 error: cannot move out of borrowed content [E0507]
src\main.rs:8 fn get_last_name(&mut self) -> String { return self.lastName; }
^~~~
error: aborting due to 2 previous errors
Could not compile `sandbox`.
由于我是 Rust 的新手,有人可以向我指出错误吗?
也可以接受更好地编写此 sn-p 的提示。我一直在寻找更容易/更快的可读性。
【问题讨论】:
-
为什么你认为你需要getter和setter?为什么不
struct Person { pub first_name: String, pub last_name: String, }比较简单? -
请注意,有时 getter 和 setter 仍然有用,例如当您在特征中定义默认方法时,因为现在您无法定义/访问特征中的任何字段。见internals.rust-lang.org/t/fields-in-traits/6933