【问题标题】:Strange behaviour of lambdas that return `dynamic` in Kotlin/JS interop在 Kotlin/JS 互操作中返回“动态”的 lambda 的奇怪行为
【发布时间】:2022-01-03 05:58:14
【问题描述】:

我想编写一个返回 dynamic 的 lambda 函数,该函数以赋值操作结束。以下内容不进行类型检查:

var a: Int?
val f: () -> dynamic = {
    a = 42
}

注意:这个例子有些人为,目的是使其最小化。实际上,我需要将此 lambda 分配给 XMLHttpRequest.onreadystatechange,因此需要类型。

f 的类型为 () -> Unit,当类型注释被移除时。为什么不能将() -> Unit 转换为() -> dynamic

另外,这个例子怎么会进行类型检查?

val f2: () -> dynamic = {
    print("foo")
}

没有注释的f2 也有() -> Unit 类型。为什么f2 进行类型检查而f 没有?

最后,f 的正确写法是什么?在末尾添加Unitnull,也许?这有效,但看起来相当难看。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: kotlin kotlin-js kotlin-js-interop


    【解决方案1】:

    我相信你能找到答案here,因为你的问题看起来和这个话题很相似

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 2019-01-24
    • 2015-04-03
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2017-07-27
    • 2016-03-14
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多