如何将Enummap传递给功能?
目标:
要将ENUMMAP从ENM_MAP板条箱传递到函数
我的错误:
25 | fn print_board(板:& [cellstatus],celldict:& enummap<& cellstatus,& str>){
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^特征 enuumArray<& str>
未针对& CellStatus
相关代码:
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(),
};
}
背景:
我试图将简单的TIC-TAC-TOE游戏作为我的第一个Rust脚本。我还没有实施游戏的逻辑。我可以通过仅通过整数和一堆IF语句来使它起作用,但我想以更干净的方式编写它。
我猜我必须为我的枚举实施一些东西吗?但我不确定该怎么做。
完整代码: https://pastebin.com/pzwqyvr2
有问题的板条箱:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据您发布的文档,您必须
衍生
板条箱的性状才能在该enum_map!
上使用enum
。唯一的修改是在您的enum
定义之前:另外,
enum_map!
的结果是enummap&lt; cellstatus,string&gt;
在您的情况下,不是enummap&lt;&amp; cellstatus,&amp; str&gt;
,更改为该类型应该有所帮助。它抱怨说&amp; cellstatus
没有实现某个特征,因为该性状是由cellstatus
的衍生宏自动实现的,而不是用于&amp; amp; cellstatus 。但是,如果执行此操作,它仍然不会编译,因为
enummap
不会实现index&lt;&amp; cellstatus&gt;
,但只有index&lt; cellstatus&gt;
(如果您问我,这有点愚蠢)。无论如何,修补此IMO的最佳方法是制作cellstatus
复制
。以下编译:According to the documentation you posted, you have to
derive
the crate's trait in order to useenum_map!
on thatenum
. The only modification is just before yourenum
definition:Also, the result of
enum_map!
is aEnumMap<CellStatus, String>
in your case, not aEnumMap<&CellStatus, &str>
, Changing into that type should help. It complains that&CellStatus
does not implement a certain trait because that trait is automatically implemented by the derive macro forCellStatus
, and not for&CellStatus
. However, if you do this it will still not compile, becauseEnumMap
does not implementIndex<&CellStatus>
, but onlyIndex<CellStatus>
(which is a bit stupid if you ask me). Anyways, the best way to patch this IMO is to makeCellStatus
Copy
. The following compiles: