Immutable JS文档引用了Seq的惰性操作。特别是以下例子:
var oddSquares = Immutable.Seq.of(1,2,3,4,5,6,7,8).filter(x => x % 2).map(x => x * x);
console.log(oddSquares.get(1));
它表示过滤器被调用3次,地图被调用两次。我不明白导致方法被分别调用3次和2次的操作顺序。事实上,如果我不得不猜测正确的“懒惰”动作是什么,我会期望它们根本不会被调用,因为它们不需要执行所请求的操作(在集合中找到1)。有人可以帮我理解链式方法是如何调用的吗?
答案 0 :(得分:0)
oddSquares.get(1)
从oddSquares
获取第二个元素。
这意味着应该调用.map(x => x * x);
两次来生成2个元素。
要.map
获取2个元素作为输入,.filter(x => x % 2)
应生成2个元素。我们可以看到filter
谓词过滤奇数。
要从初始序列Immutable.Seq.of(1,2,3,4,5,6,7,8)
获得2个奇数,我们需要处理3个数字:1
这是奇数,2
是偶数,3
是奇数
Immutable.Seq.of 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8
v v v
filter(x => x % 2) 1 - - - 3
v v
map(x => x * x) 1 - - - 9
v v
get(1) - - - - 9