我正在 Rust 中制作一个 Tic-Tac-Toe 游戏作为初学者项目,当我遇到这个问题时,我正在计算游戏的状态(获胜、平局等)。我首先写了下面的代码:
fn status(&self) -> Status {
if Board::has_won(self.x_board) {
Status::Won(true)
} else if Board::has_won(self.o_board) {
Status::Won(false)
} else if self.is_full() {
Status::Draw
} else {
Status::None
}
}
Run Code Online (Sandbox Code Playgroud)
然后我修改它以返回引用:
fn status(&self) -> &Status {
if Board::has_won(self.x_board) {
&Status::Won(true)
} else if Board::has_won(self.o_board) {
&Status::Won(false)
} else if self.is_full() {
&Status::Draw
} else {
&Status::None
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做是为了将 self 的生命周期和返回值链接在一起,因此如果板的状态发生更改,则无法再使用对状态的引用。
然后我尝试了这段代码:
fn status(&self) -> &Status {
let status;
if Board::has_won(self.x_board) {
status = Status::Won(true)
} else if …Run Code Online (Sandbox Code Playgroud) rust ×1