class PropTest {
val prop by Delegates.observable("initial", ::observe)
fun observe(meta: PropertyMetadata, old: String, new: String) {
}
}
The code above doesn't compile when function observe is within class PropTest. It seems to be ok, when I move the function outside of the class. Why is this the case?
This is because when a function is declared within a class, it's a member function and has an impllicit "this" parameter, thus it doesn't correspond to the expected parameter type of Delegates.observable, which takes 3 parameters.
What could work is capturing current “this” in the context where it exists, passing a reference to the function closed on its receiver parameter. This would have other syntax and isn’t implemented yet (but is planned, see KT-1183)
I guess the typechecker tell you that there is a type mismatch: a member of a class when used as a value is trated as an extension function, for it has one extra parameter: the receiving instance of the class