kotlin - 如何使用箭头的类型类?
问题描述
我正在尝试熟悉 arrow-kt 库,但为了完成最简单的事情,我很笨:使用内置类型类之一,即“显示”,我使用 @extension 注释使用 kapt 尝试了它并且 kapt 本身正在按预期生成必要的代码,但是缺少对扩展函数“show():String”的引用。有人可以帮我解决这个问题吗?我浪费了两天时间让这个工作。
非常感谢!
此致
亚历克斯
要扩展的类:
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()
}
这里我想使用扩展功能:
package org.hudelundpfusch.sqwakkel.arrowtest
class Gump {
private val fump: Fump = Fump("Fumpel!")
fun gumpel(): String = fump.show()
}
但是缺少对“fump.show()”的引用 =(
解决方案
你不见了show.run { }
。为了使接口中定义的扩展函数起作用,您需要在它们的范围内,使用run
或制作一个您正在使用它的类来扩展它。任何一个
class Gump: FumpShow
或者
Fump.show().run { fump.show() }
应该给你你想要的结果。
另一种选择是导入show
Arrow Meta 处理器将为您创建的函数,使用@extension
. 确保在您的build.gradle
kapt "io.arrow-kt:arrow-meta:$arrow_version"
然后它应该像show
从 IntelliJ 的建议中导入一样简单。
推荐阅读
- jquery - 在 Angular 10 中,拖动地图上的标记,将其位置放在模型内,jQuery 看不到模型:我的代码
- php - 作业未在测试中分派
- vue.js - 从 Vue2 中可变数量的输入字段更新输入字段总数
- php - 在 PHPMailer 中选择 $mail 值的随机数组
- javascript - 二十一点经销商机器人正在运行时,交易按钮不应该工作
- ios - 每次我重新点击文本字段时,视图都会发生变化
- javascript - “数字”类型的参数不可分配给“从不”类型的参数,为什么我会收到此错误?
- python - 如何为在 Tensorflow 2.x 中实现的 BERT 模型预处理数据集?
- javascript - 流式导入时 Snowpack 构建失败
- java - 事件循环应用程序(Netty、NodeJS)和多线程应用程序(.NET Core 3+、Tomcat)