Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Kotlin Arrow库生成镜头_Kotlin_Functional Programming_Arrow Kt - Fatal编程技术网

使用Kotlin Arrow库生成镜头

使用Kotlin Arrow库生成镜头,kotlin,functional-programming,arrow-kt,Kotlin,Functional Programming,Arrow Kt,我正在读“功能性Kotlin”,它描述了使用注释生成镜头的过程 @镜头 这将创建一个内存.Companion.size镜头 由于我在@lents注释中找不到任何其他材料,因此我想知道这是否是一个不推荐使用的实现 我的直觉是正确的还是我遗漏了什么?你的问题实际上就是答案。注释已重命名 正如我记得的那个样,注释是存在的,并且是对“kategory”的实验性添加(从年起,该库被重命名为“arrow”)。我找不到它出现时的提交,因为库已多次重新组织。但我敢肯定,当它重新命名时,它是一个非文档化的、高度实

我正在读“功能性Kotlin”,它描述了使用注释生成镜头的过程

@镜头 这将创建一个
内存.Companion.size
镜头

由于我在
@lents
注释中找不到任何其他材料,因此我想知道这是否是一个不推荐使用的实现


我的直觉是正确的还是我遗漏了什么?

你的问题实际上就是答案。注释已重命名

正如我记得的那个样,注释是存在的,并且是对“kategory”的实验性添加(从年起,该库被重命名为“arrow”)。我找不到它出现时的提交,因为库已多次重新组织。但我敢肯定,当它重新命名时,它是一个非文档化的、高度实验性的特性

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

名称更改的原因

“光学”比“透镜”更一般。当它开始时,只有透镜(部分是棱镜)。目前,光学元件包括:透镜、Iso、横向、折叠、棱镜、吸气剂、塞特。您可以在文档中找到更多信息。我确信这本书是很好的资料来源,尽管它已经过时了。与其他许多不同语言的镜头库不同,它对初学者非常友好

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")
}
@optics data class Memory(val size: GB) {
  companion object
}