Я искал этот код.https://www.learnrxjs.io/recipes/alphabet-invasion-game.html
const game$ = combineLatest(keys$, letters$).pipe(
scan < [string, Letters],
State >
((state, [key, letters]) => (
letters.ltrs[letters.ltrs.length - 1] &&
letters.ltrs[letters.ltrs.length - 1].letter === key
? ((state.score = state.score + 1), letters.ltrs.pop())
: noop,
state.score > 0 && state.score % levelChangeThreshold === 0
? ((letters.ltrs = []),
(state.level = state.level + 1),
(state.score = state.score + 1),
intervalSubject.next(letters.intrvl - speedAdjust))
: noop,
{ score: state.score, letters: letters.ltrs, level: state.level }
),
{ score: 0, letters: [], level: 1 }),
takeWhile(state => state.letters.length < endThreshold)
);
это еще один код, который я видел, который также использует так много комат
const game$ = combineLatest(state$, player$)
.pipe(
scan<[State, [number[][], Key]], [State, [number[][], Key]]>(
([state, [brick, key]]) => (
handleKeyPress(state, brick, key),
brick = rotate(state, brick, key),
brick = collide(state, brick),
score(state),
resetKey(key),
[state, [brick, key]]
)),
tap(([state, [brick, key]]) => render(state, brick)),
takeWhile(([state, [brick, key]]) => !state.game[1].some(c => c === brck)),
finalize(renderGameOver)
);
Я просто не понимаю, почему в теле функции так много комсканирования.Здесь их два noop,
.В моем другом примере в каждой строке есть запятая.
Кроме того, я не понимаю, зачем нам передавать здесь [ключ, буквы] в виде массива.(состояние, [ключ, буквы])
Я просмотрел старые вопросы сканирования, которые были заданы, но ни один из них не обращался к этой запятой.