如何将EnumMap传递给函数



目标:
将EnumMap从enum_map机箱传递到函数

我的错误:

25 | fn print_board(board: &[CellStatus], celldict: & EnumMap<&CellStatus, &str>){
|&CellStatus未实现特征EnumArray<&str>

相关代码:

use enum_map::{enum_map, EnumMap};
enum CellStatus{
Empty,
Cross,
Circle,
}
fn print_board(board: &[CellStatus], celldict: & EnumMap<&CellStatus, &str>){
for cell in board {
println!("{}", celldict[cell]);
}
}

fn main() {

let cell_repr = enum_map! {
CellStatus::Empty  => " _ ".to_string(),
CellStatus::Cross  => " X ".to_string(),
CellStatus::Circle => " O ".to_string(),
};

}

背景:

我试图制作一个简单的井字游戏作为我的第一个铁锈脚本。我还没有实现游戏的逻辑。我可以通过传递整数和一堆if语句来实现它,但我想用一种更干净的方式来编写它。

我想我必须为我的枚举实现一些东西?但我不知道该怎么做。

完整代码:https://pastebin.com/pZwqyvR2
有问题的板条箱:https://docs.rs/enum-map/latest/enum_map/#

根据您发布的文档,您必须derive机箱的特性,才能在enum上使用enum_map!。唯一的修改是在enum定义之前:

#[derive(Enum)]
enum CellStatus {
Empty,
Cross,
Circle,
}

此外,在您的情况下,enum_map!的结果是EnumMap<CellStatus, String>,而不是EnumMap<&CellStatus, &str>,更改为该类型应该会有所帮助。它抱怨&CellStatus没有实现某个特性,因为该特性是由CellStatus的派生宏自动实现的,而不是&CellStatus。然而,如果你这样做,它仍然不会编译,因为EnumMap没有实现Index<&CellStatus>,而只实现Index<CellStatus>(如果你问我的话,这有点愚蠢)。无论如何,修补此IMO的最佳方法是使CellStatus成为Copy。以下编译:

use enum_map::{enum_map, Enum, EnumMap};
#[derive(Enum, Clone, Copy)]
enum CellStatus {
Empty,
Cross,
Circle,
}
fn print_board(board: &[CellStatus], celldict: &EnumMap<CellStatus, String>){
for cell in board {
println!("{}", celldict[*cell]);
}
}
fn main() {
let cell_repr = enum_map! {
CellStatus::Empty => String::from("_"),
CellStatus::Cross => String::from("X"),
CellStatus::Circle => String::from("O"),
};
}

相关内容

  • 没有找到相关文章

最新更新