【发布时间】:2018-07-28 11:46:59
【问题描述】:
我正在阅读“Functional Kotlin”,它描述了使用注释生成镜头。
@lenses
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 注释
@optics data class Memory(val size: GB) {
companion object
}
这将创建一个Memory.Companion.size 镜头。
由于我无法在 @lenses 注释上找到任何其他材料,这让我想知道这是否可能是一个已弃用的实现。
我的预感是正确的还是我在这里遗漏了什么?
【问题讨论】:
标签: kotlin functional-programming arrow-kt