微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin 中的参数 KFunction

如何解决Kotlin 中的参数 KFunction

我有一个类型参数为 KFunction<*> 的类 (据了解,我会注明我以后要使用的函数类型)

我想要一个方法采用与 KFunction 相同的参数,并使用这些参数调用订阅者。但是,我不知道如何获取函数参数的类型。 C#中有委托。如何在 Kotlin 中做这样的事情?

我的班级:

class Event<Function: KFunction<*>> {
    val subscribers = mutablelistof<Function>()

    operator fun plus(increment: Function) {
        subscribers.add(increment)
    }

    // i want arguments as KFunction
    operator fun invoke(args: ???) {
        subscribers.forEach { it(args) }
    }
}

fun c(i: Int) {
    println("result of function c: $i")
}

fun main() {
    val event = Event<KFunction1<Int,Unit>>()
    event + ::c
    event(100) // passing arguments Int from KFunction1<Int,Unit>
}

有没有办法完全像这样实现我的想法?

解决方法

因此,暗示作为 Function : KFunction<*> 类型参数(在本例中为 KFunction1<Int,Unit>)传递的类型将具有自己的类型参数(在本例中为 IntUnit case),并且您想将 args 参数声明为具有这些确切类型的不确定数量的参数(不包括最后一个,它表示函数调用结果的类型)? 我相信这是不可能的。

您能做的最好的事情是将 args 声明为 vararg,类型为 Any?

operator fun invoke(vararg args: Any?) = subscribers.forEach { it.call(*args) }
,

似乎问题的唯一正常解决方案是只接受一种抽象类型的参数。

x = [list(df.iloc[[0,1,2]].mean()),list(df.iloc[[9,10,11]].mean())]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。