【发布时间】: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 的正确写法是什么?在末尾添加Unit 或null,也许?这有效,但看起来相当难看。有没有更好的方法来做到这一点?
【问题讨论】:
标签: kotlin kotlin-js kotlin-js-interop