Enums 锈菌计数问题

Enums 锈菌计数问题,enums,rust,pattern-matching,Enums,Rust,Pattern Matching,我似乎无法让我的匹配表达式工作。看看它,它似乎和我看过的其他例子一样 fn draw(board: BoardType) { let board = match board{ BoardType::B3x3(board, _) => board, BoardType::B4x4(board, _) => board }; } #[derive(Debug)] enum BoardType { B3x3([[Space; 3];

我似乎无法让我的匹配表达式工作。看看它,它似乎和我看过的其他例子一样

fn draw(board: BoardType) {
    let board = match board{
        BoardType::B3x3(board, _) => board,
        BoardType::B4x4(board, _) => board
    };
}

#[derive(Debug)]
enum BoardType {
    B3x3([[Space; 3]; 3], (i8, i8)),
    B4x4([[Space; 4]; 4], (i8, i8)),
}

#[derive(Copy, Clone, Debug)]
enum Space {
    Blank,
    X,
    O,
    Blocked,
}
BoardType::B4x4(板,)=>板
^^^^^需要一个固定大小为3个元素的数组,找到一个固定大小为4个元素的数组

我真的不明白为什么这不起作用。

match
表达式返回一个值。即使在此代码中未使用该值,编译器也需要对表达式进行类型检查。但是,表达式的两个分支有不同的类型:
[[Space;3];3]
[[Space;4];4]

错误消息告诉您,它希望第二个分支的类型与第一个分支的类型相同

问题的一部分可能是代码太简单,实际上什么都没做。假设您具有绘制这些电路板的功能:

fn draw_3x3(board: [[Space; 3]; 3]) {
    unimplemented!()
}

fn draw_4x4(board: [[Space; 4]; 4]) {
    unimplemented!()
}
然后,当您使用它们时,两个分支都将具有相同的类型(
()
),因此整个表达式将进行类型检查:

fn draw(board: BoardType) {
    let board = match board{
        BoardType::B3x3(board, _) => draw_3x3(board),
        BoardType::B4x4(board, _) => draw_4x4(board),
    };
}

match
表达式返回一个值。即使在此代码中未使用该值,编译器也需要对表达式进行类型检查。但是,表达式的两个分支有不同的类型:
[[Space;3];3]
[[Space;4];4]

错误消息告诉您,它希望第二个分支的类型与第一个分支的类型相同

问题的一部分可能是代码太简单,实际上什么都没做。假设您具有绘制这些电路板的功能:

fn draw_3x3(board: [[Space; 3]; 3]) {
    unimplemented!()
}

fn draw_4x4(board: [[Space; 4]; 4]) {
    unimplemented!()
}
然后,当您使用它们时,两个分支都将具有相同的类型(
()
),因此整个表达式将进行类型检查:

fn draw(board: BoardType) {
    let board = match board{
        BoardType::B3x3(board, _) => draw_3x3(board),
        BoardType::B4x4(board, _) => draw_4x4(board),
    };
}

你需要在某些方面进行匹配。它应该是
匹配板{…
也就是说,你仍然无法从你的两个火柴臂返回
棋盘
,因为它们的类型不同。但那是另一次如果我理解正确,我可以用if-let语法单独处理每个棋盘?是的。但是我不确定你在
draw
方法中的目标是什么,所以很难说我的最终目标是to制作一个Tic Tac Toe游戏,并使用minimax算法制作AI。我最终希望它能够处理3维,宽度为3和4。我认为枚举非常适合,因为有4种类型的电路板。现在我不太确定枚举是解决这个特殊问题的方法。打印方法应该只打印e控制台的当前状态。例如,“X | O | X”您需要在某些内容上进行匹配。它应该是
匹配板{…
也就是说,你仍然无法从你的两个火柴臂返回
棋盘
,因为它们的类型不同。但那是另一次如果我理解正确,我可以用if-let语法单独处理每个棋盘?是的。但是我不确定你在
draw
方法中的目标是什么,所以很难说我的最终目标是to制作一个Tic Tac Toe游戏,并使用minimax算法制作AI。我最终希望它能够处理3维,宽度为3和4。我认为枚举非常适合,因为有4种类型的电路板。现在我不太确定枚举是解决这个特殊问题的方法。打印方法应该只打印e控制台的当前状态,例如“X | O | X”