I want to write a lambda function that returns dynamic that ends with an assignment operation. The following does not type-check:
var a: Int?
val f: () -> dynamic = {
a = 42
}
Note: this example is somewhat artificial for the purposes of making it minimal. In reality, I need to assign this lambda to XMLHttpRequest.onreadystatechange, hence the type requirement.
f has type () -> Unit when the type annotation is removed. Why cannot () -> Unit be cast to () -> dynamic?
Moreover, how come this example type-checks?
val f2: () -> dynamic = {
print("foo")
}
f2 without the annotation also has the type () -> Unit. Why does f2 type-check and f doesn't?
Finally, what is the appropriate way to write f? Add a Unit or null at the end, perhaps? That works but looks rather ugly. Is there a better way to do that?
I'm sure you can find an answer here, because your problem looks similar to this topic