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
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我到底是怎么违反规则的呢?
在高层次上,这对Rust来说是违规的.你不能转让借来的东西的所有权,因为你不拥有它.
嗯,不是吗?我有其他功能,如:
pub fn get_hp(&self) -> i32 {
self.hp
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
|
23 | self.name
| ^^^^ cannot move out of borrowed content
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?返回字符名称的适当方法是什么?为什么get_hp方法有效但不是get_name?
mca*_*ton 12
get_hp和之间的区别get_name是get_hp返回a i32.i32是一种Copy类型.Copy只需复制位即可复制类型,永远不会移出.在另一方面String不是Copy,它管理某些存储器,它必须被转印(移出)或Cloned.
对于像这样的getter,返回引用而不是克隆是更惯用的.而对于StringS,它应该特别是&str.
pub fn get_name(&self) -> &str {
&self.name
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5979 次 |
| 最近记录: |