不能复制包含字符串的结构,那么我该如何解决这个问题呢?

考虑下面的结构:

pub struct Character {
    pub name: String
}

pub fn build_character(name: String) -> Character {
    Character {
        name,
    }
}

现在还没有什么复杂的东西,所以现在我们有了一个通过将字符串名传递给build_character构建的字符,我们将这个结构传递给一个新函数:

pub fn create_game(character: Character) -> Game {
    Game  {
        active: true,
        game_character: character,
    }
}

游戏内容定义如下:

pub struct Game {
    active: bool,
    game_character: Character,
}

impl Game {
    pub fn is_active(&self) -> bool {
        return self.active;
    }

    pub fn set_acive(&mut self, active: bool) {
        self.active = active;
    }

    pub fn get_character(&self) -> Character {
        return self.game_character;
    }

    pub fn update_character(&mut self, character: Character) {
        self.game_character = character;
    }
}

这就是我们有问题的地方。

error[E0507]: cannot move out of `self.game_character` which is behind a shared reference
  --> game/src/game/set_up_game.rs:19:16
   |
19 |         return self.game_character;
   |                ^^^^^^^^^^^^^^^^^^^ move occurs because `self.game_character` has type `character::character::charactersheet::Character`, which does not implement the `Copy` trait

在函数中:

    pub fn get_character(&self) -> Character {
        return self.game_character;
    }

这是有道理的。但是我们都知道,我们不能将复制特征添加到字符结构中,因为字符串不能被复制,它们是指向内存的指针。我试过克隆,但也不起作用,我得到了同样的错误。

(根据错误,克隆和复制用于字符结构)。

这里的想法是,游戏对象被传递,允许我更新角色,思考清单,法术,生命,等等。

我将获取游戏对象,获取角色,更新角色,然后将角色设置回游戏对象。

所以我的问题是我们如何解决这个问题?

转载请注明出处:http://www.intsu.net/article/20230428/1882087.html