您如何在minesweeper表上强制功能编程不变性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了您如何在minesweeper表上强制功能编程不变性?相关的知识,希望对你有一定的参考价值。
我正在阅读有关函数式编程和不变性的很多文章,并且在理解如何通过不改变状态来制作甚至是一个简单的扫雷游戏时遇到了一个问题。显然,您在数组中具有minesweeper表的初始状态([0,0,0,0]-所有图块均被隐藏)。但是,如果您不记录状态变化([0,0,1,0]-第二行中的第一个图块已打开),如何显示图块?
这里是我所说的简单例子:
let minesweeperTable2x2 = [0,0,0,0];
let revealTile = ( tileNumber ) =>
minesweeperTable2x2[tileNumber] = 1;
console.log(minesweeperTable2x2); // [0,0,0,0]
revealTile(2);
console.log(minesweeperTable2x2); // [0,0,1,0]
有没有从事函数式编程和不变性的人,可以通过将我编写的代码转换为函数式编程范例,并尊重完全不变性,向我解释这一点?
答案
您可以在每次调用revealTile
时重新创建表,并使用该新表,直到需要再次更新它为止:
const initialTable = ...[0,0,0,0] ;
const revealTile = (lastTable, tileNumber) =>
return ...lastTable, [tileNumber]: 1 ;
;
console.log(initialTable);
const nextTable = revealTile(initialTable, 2);
console.log(nextTable);
以上是关于您如何在minesweeper表上强制功能编程不变性?的主要内容,如果未能解决你的问题,请参考以下文章