Delegates.observable for anonymous functions in kotlin?



我正在做一些奇怪的事情,但我有一种短暂的感觉,这应该是可能的。

Kotlin 可以做到以下吗?(它可以编译但不起作用(

 var delegatedProp: (Int) -> Unit by Delegates.observable({ a-> Unit }) { _, _, newVal ->
        //This is never raised
        //Secondly how should I access the given Int ?
        //newVal.a doesn't seem to compile
    }

的想法是,一旦我调用委托 Prop(10(,可观察量就会调用,我将能够访问 newVal.a。

这将成功编译,但永远不会调用可观察量

当你

设置 delegatedProp,第二个 lambda 将被调用,即

x.delegatedProp = { print(it) }

({ print(it) }只是 (Int) -> Unit 类型的一个例子(。newVal将是您将属性设置为的函数,在本例中为 { print(it) } .所以它没有.a.

如果你想在调用delegatedProp(10)时做点什么,你只需要...将这些操作放入函数中:

val delegatedProp: (Int) -> Unit = { a -> /* do whatever you wanted to do with newVal.a */ }

如果你想delegatedProp成为一个var,但要继续做你的"额外"操作,无论它被分配给什么,最简单的方法可能是自定义getter:

var delegatedProp: (Int) -> Unit = { a -> Unit }
    get() = { a ->
        /* whatever you want to do with a */
        field(a)
    }

或者一个 setter:它不会在每次访问时创建一个新的 lambda,但要么复制一些代码,要么需要至少显式设置一次,而不仅仅是初始化。

最新更新