加载中...

Lens(透镜)是函数式编程中用于访问与更新不可变嵌套数据结构的可组合抽象。一个 Lens 聚焦于大结构中的某个部分,同时提供 get(读取该部分)与 set(返回替换该部分后的新整体)两种能力,并可像函数一样组合,逐层深入嵌套结构。
直接更新不可变嵌套记录需要手写层层拷贝,代码冗长。Lens 把"路径"本身抽象为一等值:组合多个 Lens 得到深层路径,一次性完成深层读改。Haskell 的 lens 库用高阶函数(van Laarhoven 表示)编码,使 Lens、Prism(聚焦和类型分支)、Traversal(聚焦多个位置)等统一为 optics 家族。
Haskell 生态的 lens/optics 库应用广泛;Scala 有 Monocle,TypeScript 有 monocle-ts;前端状态管理中 Ramda 的 lensPath、Immer 等也体现了类似思想。
优点是深层不可变更新简洁、可组合、可复用;缺点是抽象层次高,类型报错晦涩,入门曲线较陡。

登录 后参与讨论
暂无讨论,来发表第一条评论吧