首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Kotlin Arrow库生成透镜

用Kotlin Arrow库生成透镜
EN

Stack Overflow用户
提问于 2018-07-28 11:46:59
回答 1查看 1.1K关注 0票数 2

我正在阅读"Functional“,它描述了使用注释生成透镜的过程。

@透镜

代码语言:javascript
复制
import arrow.lenses
import arrow.optics.Lens
import arrow.optics.modify

typealias GB = Int
@lenses data class Memory(val size: GB)
@lenses data class MotherBoard(val brand: String, val memory: Memory)
@lenses data class Laptop(val price: Double, val motherBoard: MotherBoard)

fun main(args: Array<String>) {
    val laptopX8 = Laptop(500.0, MotherBoard("X", Memory(8)))
    val laptopMemorySize: Lens<Laptop, GB> = laptopMotherBoard() compose
motherBoardMemory() compose memorySize()
    val laptopX16 = laptopMemorySize.modify(laptopPrice().set(laptopX8, 780.0)) { size ->
        size * 2
    }
    println("laptopX16 = $laptopX16")
}

Arrow生成的镜头和构造函数参数一样多,我们的数据类具有名称约定classProperty和相同的包,因此不需要额外的导入。

但是,当我试图使用@lenses注释时,却找不到它。

@光学

在Arrow文档中,我注意到它们使用了@optics注释

代码语言:javascript
复制
@optics data class Memory(val size: GB) {
  companion object
}

这将创造一个Memory.Companion.size镜头。

由于我无法在@lenses注释中找到任何其他材料,所以我想知道这是否是一个不推荐的实现。

我的预感是正确的还是我在这里遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-12 16:00:46

你的问题其实就是答案。注释被重命名。

正如我所记得的那样,注释已经存在,并且是"kategory“的试验性添加(库从此被重命名为”箭头“)。当它出现时,我找不到提交,因为库重新组织了很多次。但我相信当它改名时,这是一个没有文件记载的高度实验性的特性。

那是这本书作者的错吗?我没有读过它,但是这个特性对于kotlin开发人员来说非常有趣和透视图,尽管这是非常实验性的。

为什么改名

“光学”是比“透镜”更通用的术语。当它开始的时候,只有透镜(和部分棱镜)。目前,光学包括:透镜,伊索,遍历,折叠,棱镜,吸气剂,设置器。你可以在文档中找到更多的信息。我肯定那本书是个不错的来源,尽管它已经过时了。“箭博士”非常初学者友好,不像其他许多不同语言的镜头-libs。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51571072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档