gpt4 book ai didi

kotlin - 多平台环境中的Kotlin反射/动态函数调用

转载 作者:行者123 更新时间:2023-12-02 12:47:16 25 4
gpt4 key购买 nike

给定

class X {
fun f() {...}
fun g() {...}
...
}

我想按名称调用f,g或其他类函数,该函数在运行时动态已知。这可以通过 Kotlin 反射来实现,例如
val callback : KCallable<*>? = X::class.members.firstOrNull { it.name == predVar }
if (callback != null) {
callback.call(obj, ...)

这里唯一的问题是我的多平台应用程序的目标不是JVM。例如,kotlin反射在javascript中可行吗?当然,JS是动态类型的语言,因此我的问题是它是否已在其中实现。

另外,我可以拥有这些功能的集合或 map 。定义函数列表并使它们可动态调用的最优雅的语法是什么?例如,给定几个枚举类型属性,我可以制作一堆这样的 bool(boolean) 方法
var booleanDerivatives = hashMapOf<String, () -> Boolean>(
"breaksAfterComma" to fun (): Boolean {
return options[breaksComma] === Breaks.After
}
,"breaksBeforeComma" to fun (): Boolean {
return options[breaksComma] === Breaks.Before
}
,"breaksAfterLogicalConjunction" to fun (): Boolean {
return options[breaksAroundLogicalConjunctions] === Breaks.After
|| options[breaksAroundLogicalConjunctions] === Breaks.BeforeAndAfter
}
)

但是,与反射不同,我似乎不得不使用字符串文字,因为没有反射,就没有将名称转换为字符串的机制。还是有?

最佳答案

根据the docs,不,您不能通过JS目标中的反射来访问方法。您将需要维护自己的function references集合,以实现您在JVM和JS目标中描述的内容。

关于kotlin - 多平台环境中的Kotlin反射/动态函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55388219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com