All streams
Search
Write a publication
Pull to refresh
36
0
Роман @Pozadi

User

Send message
Нельзя такую коллекцию. Reduced мы зарезервировали, в этом нет ничего страшного.
Сорри, перепутал. Там result не обязательно будет тот же самый. Можно вернуть new Reduced(step(result, что-то)).
Как не играет, значение нужно же вернуть. Вы скажите конкретно откуда вы хотите возвращать этот undefined?
Кроме того вы резервируете undefined для этой цели, а он вполне может использоваться как обычное значение в библиотеке использующей трансдьюсер.
Только в Reduced завернуто значение еще.
Странно, вместо конструкции `Reduced` можно же реализовать `take/limit` на подобии `filter`. Или я что-то упустил?

Тогда остальная часть коллекции тоже будет обрабатываться, хоть и все элементы выбросит take. А коллекции могут быть и бесконечными.
Какой ужас, как вы только на этом ООП пишите? :-)

Если серьезно, то есть еще вопросы.

Можно ли имея на руках одну сложную операцию сложить ее с другой сложной операцией?

Уже писал, но повторюсь, будет ли это работать с FRP и прочими асинхронными вещами? Для .NET вроде есть реализация Rx.

Вообще подход с тем что возвращается новая коллекция скорее похож на LazyJs, и если создать сложную операцию в LazyJs, её нельзя будет передать в FRP библиотеку. Поэтому и спрашиваю про FRP.
Да, похоже. А IEnumerable позволяет заранее создать сложную операцию (flatten+map+filter+take) и потом применить ее сначала к списку, потом её же к хеш-мепу, и её же передать в библиотеку генерирующую значения со временем (Rx и пр)?
Я не знаю точно что такое IEnumerable. Если правильно понимаю, это интерфейс который должны реализовывать коллекции. Если так, то эти вещи стоят рядом но никак друг друга не заменяют. Т.е. вы можете обрабатывать с помощью трансдьюсеров всё, что реализует IEnumerable, но это же не значит что трансдьюсеры == IEnumerable.

Или я неправильно понял?
Да да, я читал) Об этом во второй части.
Compose там замешан, но это только часть истории. Планирую скоро написать пост про трансдьюсеры.
Тогда можно так:

printer = config.flatMapLatest(function(config) {
  // возвращаем поток. Т.е. как бы переключаемся с потока на поток в зависимости от config
  return config ? mouseCoords : mouseTarget;
}).map(function (coordsOrTarget) {
  // тут уже обрабатываем конкретные значения из mouseCoords или mouseTarget
  return  'Hello ' + coordsOrTarget;
});


Я еще не успел написать документацию для .flatMapLatest, можно почитать в доках бекона пока: github.com/baconjs/bacon.js#observable-flatmaplatest
Kefir, кстати, по определению ленив и работает похоже на LazyJS. Так как он обрабатывает поток значений, а не массив значений, и не может создавать временные массивы с результатами при всём желании.
Даже не знаю. LoDash можно например активно использовать внутри кефировских .map, .filter и пр. Еще можно его использовать во внешнем коде который, что-то делает с потоками. А так чтобы LoDash прям как-то взаимодействовал с Kefir — ничего особо в голову и не приходит.

Вот если бы LoDash умел создавать трансдьюсеры, и Kefir поддерживал трансдьюсеры, тогда они могли бы прям клёво взаимодействовать. Если трансдьюсеры станут модными в JavaScript, тогда может это будет…
Вы что-то странное написали, оно не будет работать :)
В .scan первый аргумент — предыдущее значение, а второй новое значение из источника, и вы должны вернуть значение которое выйдет из printer и станет «предыдущим значением» на следующем шаге. А .merge просто берет два потока и все события из них отправляет в новый поток. Ну т.е. вы никак не получите config и coords как параметры в .scan.

Реализация в лоб скорее будет такая:

printer = Kefir.combine([config, coords], function(config, coords) {
  return 'Hello' + ( config ? coords : '' )
});


Но как вы верно заметили будут ненужные вычисления. Чтобы их избежать можно использовать .filterBy:

printer = coords.filterBy(config).map(function(coords) {
  return 'Hello' + coords
});


.filterBy он как .filter, только вместо функции принимает проперти или поток.
ок, React тогда)
facebook.github.io/react/ дает тоже самое и не надо платить, или на крайняк emberjs.com/
да, но я надеюсь что я шутил :)

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity