ImmutableJS пропускает неиспользуемый блок кода?

1

Я играю с кодом Immutable.js и заметил что-то напуганное. Does Immutable.js пропускает код, который сохраняет переменные, которые не будут использоваться?

const Immutable = require('immutable')

function transformErrors(errors) {
    let key = errors.keySeq()
    let mapped = key.map((v, keystr) => {
      console.log(v, keystr)
      return keystr
    })
  // If I enable the console log below, console log above works
  // console.log('mapped', mapped) 
};
const result = transformErrors(Immutable.fromJS([1, 2]));

Для приведенного выше кода, если

console.log('mapped', mapped)

отключен, код отображения не вызывается. Я просмотрел документацию, но не смог найти никаких замечаний

Теги:
immutable.js

1 ответ

1
Лучший ответ

Строка: let key = errors.keySeq() вернет объект Seq, который в immutable.js ленив.

В документации представлены следующие сведения (https://facebook.github.io/immutable-js/docs/#/Seq):

Seq ленив - Seq выполняет как можно меньше работы, чтобы ответить на любой вызов метода. Значения часто создаются во время итерации, включая неявную итерацию при сокращении или преобразовании в конкретную структуру данных, такую как список или массив JavaScript. Например, следующее не выполняет никакой работы, поскольку полученные значения Seq никогда не повторяются:

const { Seq } = require('immutable')
const oddSquares = Seq([ 1, 2, 3, 4, 5, 6, 7, 8 ])
  .filter(x => x % 2 !== 0)
  .map(x => x * x)

Поэтому в вашем примере immutable.js не собирается на самом деле оценивать вашу функцию карты до тех пор, пока mapped будет использовано где-то.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню