首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用箭头的类型类?

如何使用箭头的类型类?
EN

Stack Overflow用户
提问于 2019-07-23 04:38:14
回答 2查看 347关注 0票数 0

我正在试着熟悉arrow-kt库,但为了完成最简单的事情,我选择了哑巴:使用一个内置的类型类,即“show”。我用@extension注解在kapt中尝试了一下,kapt本身生成了所需的代码,但缺少对扩展函数“show():String”的引用。有人能帮我解决这个问题吗?我浪费了两天的时间才让它起作用。

非常感谢!

诚挚的问候

亚历克斯

要扩展的类:

代码语言:javascript
复制
package org.hudelundpfusch.sqwakkel.arrowtest

import arrow.extension
import arrow.typeclasses.Show

class Fump(private val fumpel: String) {

    companion object {}

    override fun toString(): String {
        return "Fump(fumpel='$fumpel')"
    }

}

@extension
interface FumpShow
    : Show<Fump> {
    override fun Fump.show(): String = toString()
}

这里我想使用扩展函数:

代码语言:javascript
复制
package org.hudelundpfusch.sqwakkel.arrowtest

class Gump {

    private val fump: Fump = Fump("Fumpel!")

    fun gumpel(): String = fump.show()

}

但是对'fump.show()‘的引用缺少=(

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-23 05:58:59

你要错过show.run { }了。要使在接口中定义的扩展函数工作,您需要在它们的作用域内,使用run或在使用它的地方创建一个类来扩展它。任一

代码语言:javascript
复制
class Gump: FumpShow

代码语言:javascript
复制
Fump.show().run { fump.show() }

应该会给你想要的结果。

另一种选择是使用@extension导入Arrow Meta处理器为您创建的show函数。确保在您的build.gradle中正确配置了它

代码语言:javascript
复制
kapt "io.arrow-kt:arrow-meta:$arrow_version"

然后,它应该像从IntelliJ的建议中导入show一样简单。

票数 3
EN

Stack Overflow用户

发布于 2019-07-23 06:18:16

非常感谢你,El Paco!

但我必须承认这对我来说有点违反直觉。=/

现在我用这种方法结束了:

代码语言:javascript
复制
package org.hudelundpfusch.sqwakkel.arrowtest

import org.hudelundpfusch.sqwakkel.arrowtest.fump.show.show

object FumpShowInstance : FumpShow

class Gump {

    private val fump: Fump = Fump("Fumpel!")

    fun gumpel(): String = FumpShowInstance.run { fump.show() }

}

fun main(args: Array<String>) {
    val gump: Gump = Gump();
    println("${gump.gumpel()}")
}

诚挚的问候

亚历克斯

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

https://stackoverflow.com/questions/57153396

复制
相关文章

相似问题

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