streamjs 和 linqjs 之间有什么关系



在阅读了SICP之后,我最近发现了streamjs。开发人员引用 linqjs 作为具有不同语法的替代实现,但我无法建立联系。streamjs 中的方法如何映射到 linqjs 中的方法?

我没有使用过这两个库,但是,这是我的初步分析(我已经阅读了相当多的 SICP,但不可否认不是全部)。

stream.js是列表的功能样式数据结构的实现。函数式语言中的许多数据结构往往是递归的,就像Stream结构一样。 它由头部元素和尾部Stream(后续元素)组成。在这里,惰性求值可以通过允许尾巴是一个函数(即无限序列)来实现。

现在,为了回答您的问题,linq.js提供的所有函数都应该能够与其他常见的高阶函数(如map,reduce,walk,fold等)一起定义。

当然,stream.js 没有实现 linq.js 中的 Any() 方法,但您可以使用 reduce() .

我想它们是相似的,因为它们传递函数而不是"标量值",因此它们可以进行惰性计算(在操作结束时/按需评估结果,而不是像经典的javascript数据结构那样在每个操作中评估结果)。我在 pimpple.js 库中使用了这个原则,它与流或链接无关,而是使用惰性评估。

linq.js 和 stream.js 具有以下相似之处:

  • 使用函数将流实现为数据结构
  • 使用流实现操作的延迟评估

LINQ.js 和 Stream.js 具有以下区别:

  • linq.js 具有用于查询 JSON 的语法糖
  • 流.js具有链接流的能力
  • LINQ.js 具有用于集合操作的语法糖

引用

  • LINQ in JavaScript for Real
  • JavaScript 中的 LINQ,ES6 风格

相关内容

  • 没有找到相关文章

最新更新