如何设置现有结构的值?

时间:2016-10-16 19:49:37

标签: 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 = 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设置为传入的值?这个左手表达爵士乐是什么?我无法在文档中找到有关此内容的任何信息。

1 个答案:

答案 0 :(得分:2)

语法&foo = bar没有意义。如果它有效,那就意味着:

  1. 参考foo
  2. 将引用(指针)替换为bar
  3. 你想要的是

    fn set_hp(&mut self, hp: &i32) {
        self.hp = *hp;
    }
    

    取消引用传入的参数,它存储在self.hp中。请注意,self参数必须是可变的才能更改值。

      

    左手表达爵士乐是什么?

    通常缩写为 LHS ,它就是赋值操作的左侧。有些事情是有效的。例如,5 = 6也是无效的LHS。