这是2条未注释的方法,一种有效,而第二种使用ramdajs的方法无效:
// const dies = col && 2 > count > 3
// const lives =
// (col && (count === 2 || count === 3)) || (!col && count === 3)
// return dies ? null : lives ? true : null
const result = (_col, _count) =>
R.cond([
[_col && (_count === 2 || _count === 3), true],
[!_col && _count === 3, true],
[_col && 2 > _count > 3, null],
[R.T, null]
])
return result(col, count)
我收到一个错误Cannot read property 'length' of null
答案 0 :(得分:2)
在我看来,您正在尝试直接编写Game of Life规则。
我认为类似的方法会很好:
const nextGeneration = (col, count) => count == 3 || (col && count == 2)
这将返回一个布尔值,而不是您的true
| null
。这让我感到更干净,但是如果您想要null,只需在末尾添加|| null
。
这不使用Ramda。我在这里没有理由这样做(免责声明:我是Ramda的作者。)但是,如果您愿意,我敢肯定我们可以将其转换为Ramda的一些免分版本,但它的可读性可能会大大降低。 / p>
顺便说一句,您的任何版本似乎都出了问题。 2 > count > 3
应该是什么意思?即使它确实在JS中扩展为2 > count && count > 3
,但实际上并非如此,因为2 <3,所以这永远都是不正确的。