Rust 如何设置现有结构的值?
考虑以下几点:Rust 如何设置现有结构的值?,rust,Rust,考虑以下几点: 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
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
}
}
这将生成以下错误:
错误[E0070]:左侧表达式无效
-->src/game/character/character.rs:22:9
|
22 |&self.hp=hp;
|^^^^^^^^^^^^^^^表达式的左侧无效
为什么我不能将
字符.hp
设置为传入的值?这个左手的表达是什么?我在文档中找不到这方面的任何信息。语法&foo=bar
没有意义。如果它起作用,它将意味着:
foo
bar
的值fn set_hp(&mut self, hp: &i32) {
self.hp = *hp;
}
这将取消对传入参数的引用,并将其存储在self.hp
中。请注意,self
参数必须是可变的才能更改值
这个左手的表达是什么
通常缩写为LHS,它位于赋值操作的左侧。有些东西是可以分配的。例如,
5=6
也将是无效的LHS。语法&foo=bar
没有意义。如果它起作用,它将意味着:
foo
bar
的值fn set_hp(&mut self, hp: &i32) {
self.hp = *hp;
}
这将取消对传入参数的引用,并将其存储在self.hp
中。请注意,self
参数必须是可变的才能更改值
这个左手的表达是什么
通常缩写为LHS,它位于赋值操作的左侧。有些东西是可以分配的。例如,
5=6
也将是无效的LHS。&self.hp=hp
正在尝试分配给引用,这显然不是一个好主意self.hp=hp
(取而代之的是&mut self
,因为您正在变异self
)。&self.hp=hp
正在尝试分配一个引用,这显然不是一个好主意self.hp=hp
(取而代之的是&mut self
,因为您正在变异self
)。注意:通常,Copy
-像i32
这样的类型不是通过不可变引用传递的,而是通过值传递的。注意:通常,Copy
-像i32
这样的类型不是通过不可变引用传递的,而是通过值传递的。