下面是 Ramda 评论群里对函数式编程中的光学组件的评论,感谢 弥耶。

  透镜系统有两个部分所组成 分别是光学组件和操作。

  光学组件分四种 透镜(lens) 棱镜(prism) 遍历(traversal) 同构(iso),其间遍历有一个特别的状况叫affineTraversal(仿射遍历)。操作有这么几种, 和光学组件的配对联系是:

  Lens 是类型结构器(创立类型的类型,或称为高阶类型),其类型签名为 Lenss, a, s 和 a 是类型变量(能够了解为泛型), 其间 s 类型里有必要包括 a 类型的值.

  这是类型视点的剖析。R.lensProp 可认为咱们创立一个聚集于目标中给定特点的镜头, 然后合作相关的镜头操作函数(R.view, R.set, R.over),能够在坚持输入数据不变(Immutable)的状况下,对镜头聚集的部分进行查询、设置、更新等。

  不过js/ts没有hm类型(便是Maybe这些) 一切都是目标 所以根本只会用到lens。

  假如只从js视点看或许很难了解,由于许多东西是hm类型上需求的东西。在函数式里,Lens 实际上非常常用:

  这是在写的一个测验游戏 其间对玩家的各种操作都是经过透镜完成的 透镜能够便利的组合来描绘我要做什么 我还能够便利的把操作数据的函数再组合成大函数 最终表达逻辑 非常快捷。