我正在尝试创建一个向量,用于在游戏中跟踪敌人,它将持有一堆可变结构体。我有一个世界结构体,其中包含敌人作为其成员,如下所示:
pub struct World {
pub player : Creature,
pub enemies : Vec<Creature>,
}
我按照以下方式创建敌人向量:
let mut enemies = vec![];
let mut enemy = Creature::new(5, 5, map_start_x+5, map_start_y+5, "$", 10, 1, "")
enemies.push(enemy);
稍后在代码中,当我从enemies
中选出一个敌人进行攻击并尝试更新其hp时,如下:
在代码的后续部分,当我从enemies
中选择一个敌人进行攻击,并尝试按以下方式更新它的hp:
for enemy in self.enemies.iter() {
if new_x == enemy.x && new_y == enemy.y {
enemy.hp -= self.player.damage;
return;
}
}
问题出在这里,因为敌人在这一点上显然是不可变的
error: cannot assign to immutable field `enemy.hp`
mut_iter()
解决了问题(我的示例不够清晰,但实际上我传递的是&mut self
):) - Lindsey Bmut_iter
现已更名为iter_mut
。 - Cam Jackson