首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin光学数据类引用中的未解析引用

Kotlin光学数据类引用中的未解析引用
EN

Stack Overflow用户
提问于 2022-06-10 12:38:28
回答 2查看 322关注 0票数 2

正在为Kotlin玩箭头库,并在文档https://arrow-kt.io/docs/optics/中发现了这个错误。我做错了什么?

代码语言:javascript
复制
 Unresolved reference: company

代码是下一个代码,因此由于引用中的错误,它没有编译。

代码语言:javascript
复制
package com.app

import arrow.optics.Optional
import arrow.optics.optics

@optics
data class Street(val number: Int, val name: String) {
    companion object
}

@optics
data class Address(val city: String, val street: Street) {
    companion object
}

@optics
data class Company(val name: String, val address: Address) {
    companion object
}

@optics
data class Employee(val name: String, val company: Company) {
    companion object
}


fun main() {
    // an immutable value with very nested components
    val john = Employee("John Doe", Company("Kategory", Address("Functional city", Street(42, "lambda street"))))
// an Optional points to one place in the value
    val optional: Optional<Employee, String> = Employee.company.address.street.name
// and now you can modify into a new copy without nested 'copy's!
    optional.modify(john, String::toUpperCase)

}

下一个是我的依赖项。

代码语言:javascript
复制
    //region Arrow
    implementation("io.arrow-kt:arrow-core:$arrow_version")
    implementation("io.arrow-kt:arrow-fx-coroutines:$arrow_version")
    implementation("io.arrow-kt:arrow-optics:$arrow_version")
    //endregion
EN

回答 2

Stack Overflow用户

发布于 2022-06-10 13:24:58

您的分级配置似乎缺少一些所需的Google设置。您可以在网站的箭头光学装置部分和下面找到它。

代码语言:javascript
复制
plugins {
    id("com.google.devtools.ksp") version "$googleKspVersion"
}

dependencies {
    ksp("io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion")
}

您还需要让IDEA知道生成的源代码,否则它将无法正确地提取代码突出显示和语法报告的代码。该设置在正式的Kotlin网站上进行了解释,如下所示。

代码语言:javascript
复制
kotlin {
    sourceSets.main {
        kotlin.srcDir("build/generated/ksp/main/kotlin")
    }
    sourceSets.test {
        kotlin.srcDir("build/generated/ksp/test/kotlin")
    }
}
票数 2
EN

Stack Overflow用户

发布于 2022-07-27 20:56:03

在构建脚本中添加下面的代码(*.gradle.kts)。它将注册一个新的源dir,这样您的IDE将看到生成的扩展。不管您有多少口味和构建类型,这都是可行的。

代码语言:javascript
复制
android {
    // ...
    androidComponents.onVariants { variant ->
        val name = variant.name
        sourceSets {
            getByName(name).kotlin.srcDir("${buildDir.absolutePath}/generated/ksp/${name}/kotlin")
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72574437

复制
相关文章

相似问题

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