请考虑以下事项:
use rand::{thread_rng, Rng};
struct Character {
name: String,
hp: i32,
level: i32,
xp: i32,
gold: i32
}
impl Character {
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 }
}
fn set_hp(&self, hp: &i32) {
&self.hp = hp;
}
fn get_hp(&self) -> i32 {
self.hp
}
}
会产生以下错误:
error[E0070]: invalid left-hand side expression
--> src/game/character/Character.rs:22:9
|
22 | &self.hp = hp;
| ^^^^^^^^^^^^^ left-hand of expression not valid
为什么我不能将Character.hp
设置为传入的值?这个左手表达爵士乐是什么?我无法在文档中找到有关此内容的任何信息。
答案 0 :(得分:2)
语法&foo = bar
没有意义。如果它有效,那就意味着:
foo
。bar
的值。你想要的是
fn set_hp(&mut self, hp: &i32) {
self.hp = *hp;
}
此取消引用传入的参数,它存储在self.hp
中。请注意,self
参数必须是可变的才能更改值。
左手表达爵士乐是什么?
通常缩写为 LHS ,它就是赋值操作的左侧。有些事情是有效的。例如,5 = 6
也是无效的LHS。