pub struct Character {
name: String,
hp: i32,
level: i32,
xp: i32,
xp_needed: i32,
gold: i32
}
impl Character {
pub fn new(name: String) -> Character {
let mut rng = thread_rng();
let hp: i32 = rng.gen_range(12, 75);
let gold: i32 = rng.gen_range(10, 50);
Character { name: name, hp: hp, level: 1, xp: 0, gold: gold, xp_needed: 100 }
}
pub fn get_name(&self) -> String {
self.name
}
// ...
}
请问我在这里违反了什么规则?
从高层次来看,这违反了Rust的原则。因为你不拥有它,所以无法转移借用的所有权。
难道不是吗?我还有其他类似的函数:
pub fn get_hp(&self) -> i32 {
self.hp
}
这样做非常好。
|
23 | self.name
| ^^^^ cannot move out of borrowed content
error: aborting due to previous error
发生了什么?返回角色名称的适当方法是什么?为什么get_hp
方法有效而get_name
方法无效?
i32
是可复制的,但String
不是。你没有拥有self
,它被借用了(&self
)。 - Shepmaster