gpt4 book ai didi

rust - 无法复制具有字符串的结构,因此如何解决此问题?

转载 作者:行者123 更新时间:2023-12-03 11:42:58 26 4
gpt4 key购买 nike

考虑以下结构:

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;
}
这是有道理的。但是众所周知,由于无法复制字符串,因此无法将复制特征添加到字符结构中,它们是指向内存的指针。我尝试了克隆,但是那也不起作用,我得到了同样的错误。
(根据错误,复制和复制适用于字符结构)。
这里的想法是传递游戏对象,使我可以更新角色,思考库存,咒语,健康等等。
我将获取游戏对象,获取角色,更新角色,然后将角色重新设置在游戏对象上。
所以我的问题是我们如何解决这个问题?

最佳答案

可能性1:为Clone实现/派生Character并返回一个克隆:

#[derive(Clone)]
pub struct Character {
pub name: String
}

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

impl Game {
// possibility 1
pub fn get_character(&self) -> Character {
return self.game_character.clone();
}
}
可能性2:返回引用。
#[derive(Clone)]
pub struct Character {
pub name: String
}

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

impl Game {
pub fn get_character(&self) -> &Character {
return &self.game_character;
}
}
可能性2(返回引用)的优点是价格便宜,并且调用方可以自行决定是否确实需要副本,在这种情况下,调用方只需手动 clone即可。

关于rust - 无法复制具有字符串的结构,因此如何解决此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62921260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com