问题描述
我是 Rust 的新手。作为我的第一个项目,我决定创建一个小库,将国际象棋符号(PGN 和 FEN)转移到尽可能小的空间中。 我目前的实现如下:
mod data {
use modular_bitfield::{
BitfieldSpecifier,bitfield,};
#[derive(BitfieldSpecifier)]
pub enum Color {
White,Black,}
#[derive(BitfieldSpecifier)]
#[bits=3]
pub enum Rank {
Pawn,Knight,Bishop,Rook,Queen,King,None,}
#[bitfield]
pub struct Piece {
rank: Rank,color: Color
}
#[bitfield]
pub struct Board {
state: [[Piece; 8]; 8]
}
}
我有两个问题
它给我的第一个错误是没有为类型指定位域:[[Piece; 8]; 8]
第二个是那个结构体必须至少用 8 位来表示(至少这是错误所说的)。但是因为我有一个 N=8*8 的数组,它会占用太多空间。
如果我将 Rank and Piece 更改为:
#[derive(BitfieldSpecifier)]
#[bits=3]
pub enum Rank {
Pawn(Color),Knight(Color),Bishop(Color),Rook(Color),Queen(Color),King(Color),}
我收到以下错误:
error[E0605]: non-primitive cast: `Rank` as `usize`
--> src/lib.rs:43:9
|
43 | None,| ^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
另外,如果我给 None 一个颜色,我仍然会得到同样的错误。如果我删除 None 并将一个 Option 类型传递给数组,恐怕它的大小可能会增加,而且我仍然遇到相同的错误:它的特征不满足 [[Option; 8]; 8]
我也尝试过使用元组而不是结构体,但这也无济于事
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)