我嘗試進行flutter null安全遷移,我有這個舊代碼,它在null安全之前作業,但是升級后當有“null”時我有一些錯誤。我怎樣才能改變這個?
錯誤bestMove:the non nullable local variable must be assigned before it can be used
錯誤 return ScoredMove(0, null);:
the argument null can"t be assigned to the parameter Position
這是代碼類ScoredMove { final int score; 最終位置移動;
const ScoredMove(this.score, this.move);
}
Position _findNextMove(MoveSearchArgs args) {
ScoredMove bestMove = _performSearchPly(
args.board, args.player, args.player, args.numPlies - 1);
return bestMove.move;
}
ScoredMove _performSearchPly(GameBoard board, PieceType scoringPlayer,
PieceType player, int pliesRemaining) {
List<Position> availableMoves = board.getMovesForPlayer(player);
if (availableMoves.isEmpty) {
return ScoredMove(0, null);
//the argument null can"t be assigned to the parameter Position
}
int score = (scoringPlayer == player)
? GameBoardScorer.minScore
: GameBoardScorer.maxScore;
ScoredMove bestMove;
for (int i = 0; i < availableMoves.length; i ) {
GameBoard newBoard =
board.updateForMove(availableMoves[i].x, availableMoves[i].y, player);
if (pliesRemaining > 0 &&
newBoard.getMovesForPlayer(getOpponent(player)).isNotEmpty) {
score = _performSearchPly(
newBoard, scoringPlayer, getOpponent(player), pliesRemaining - 1)
.score;
} else if (pliesRemaining > 0 &&
newBoard.getMovesForPlayer(player).isNotEmpty) {
// Opponent has no moves; player gets another turn.
score =
_performSearchPly(newBoard, scoringPlayer, player, pliesRemaining - 1)
.score;
} else {
score = GameBoardScorer(newBoard).getScore(scoringPlayer);
}
//bestMove error the non nullable local variable must be assigned before it can be used
if (bestMove == null ||
(score > bestMove.score && scoringPlayer == player) ||
(score < bestMove.score && scoringPlayer != player)) {
bestMove =
ScoredMove(score, Position(availableMoves[i].x, availableMoves[i].y));
}
}
return bestMove;
}
class MoveFinder {
final GameBoard initialBoard;
MoveFinder(this.initialBoard) : assert(initialBoard != null);
Future<Position> findNextMove(PieceType player, int numPlies) {
return compute(
_findNextMove,
MoveSearchArgs(
board: this.initialBoard,
player: player,
numPlies: numPlies,
),
);
}
}
uj5u.com熱心網友回復:
你不能做
ScoredMove(0, null)
因為move引數不允許為null。一個可能的解決方案是使其可以為空。您可以通過?在型別之后添加來做到這一點,例如
class ScoredMove { final int score; final Position? move;
const ScoredMove(this.score, this.move);
}
對于其他錯誤,您可以嘗試更改
ScoredMove bestMove;
至
ScoredMove? bestMove = null;
并且也在改變
return bestMove;
至
return bestMove!;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489967.html
標籤:扑
