Rxjs Сканирование с таким количеством ком в его теле функции? - PullRequest
0 голосов
/ 21 июня 2019

Я искал этот код.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,.В моем другом примере в каждой строке есть запятая.

Кроме того, я не понимаю, зачем нам передавать здесь [ключ, буквы] в виде массива.(состояние, [ключ, буквы])

Я просмотрел старые вопросы сканирования, которые были заданы, но ни один из них не обращался к этой запятой.

1 Ответ

2 голосов
/ 21 июня 2019

Это просто причудливое / умное / слишком сложное использование синтаксиса / функций javascript.Во-первых, все это запятые: есть оператор запятой , который оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда .(doc: оператор комы ).

Простой пример:

c = (
 a = 1, // assigns value 1 to variable a
 b = 2, // assigns value 2 to variable b
 console.log(a, b), // log values to console
 "c"
)

выведет:

1 2 // console log
"c" // value of last operand 

... и cпеременная будет иметь "c" значение:

console.log(c) // prints "c"

Другая является другой функцией js - назначение деструктурирования

const myFn = ([a, [b, c]]) => console.log(a, b, c);
const arrayOfThatShape = [1, [2, 3]];
myFn(arrayOfThatShape) // prints 1 2 3 

Так что в основном все это не связано сRxJS вообще, ни с функционально-реактивным программированием.ИМО такие примеры слишком сложны и создают ненужный шум для новичков RxJS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...