Невозможно прочитать свойство 'length' с нулевым значением с помощью R.md - PullRequest
0 голосов
/ 30 августа 2018

Вот 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

1 Ответ

0 голосов
/ 30 августа 2018

Мне кажется, что вы пытаетесь написать правила Game of Life слишком прямо.

Я думаю, что-то вроде этого подойдет:

const nextGeneration = (col, count) => count == 3 || (col && count == 2)

Возвращает логическое значение, а не true | null. Это кажется мне чище, но если вы хотите ноль, просто добавьте || null в конце.

Это не использует Рамда. Я не вижу причин делать это здесь (отказ от ответственности: я - автор Ramda). Но если бы вы захотели, я уверен, что мы могли бы превратить это в какую-то версию Ramda без очков, но она, вероятно, была бы намного менее читаемой.

Кстати, похоже, что-то не так с любой из ваших версий. Что должно означать 2 > count > 3? Даже если бы это расширилось до 2 > count && count > 3 в JS, чего не происходит, это никогда не будет правдой, поскольку 2 <3. </p>

...