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())]