首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delegates.observable用于kotlin中的匿名函数?

Delegates.observable用于kotlin中的匿名函数?
EN

Stack Overflow用户
提问于 2019-06-12 13:34:35
回答 1查看 87关注 0票数 0

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

用科特林做下面的可能吗?(它编译但不起作用)

代码语言:javascript
复制
 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
    }

我不认为一旦我调用了delegatedProp(10),可观察到的就会调用,我就能够访问newVal.a。

这将成功编译,但从未调用可观察到的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 14:22:53

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

代码语言:javascript
复制
x.delegatedProp = { print(it) }

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

如果你想在调用delegatedProp(10)时做点什么,你只要.将这些行动纳入职能:

代码语言:javascript
复制
val delegatedProp: (Int) -> Unit = { a -> /* do whatever you wanted to do with newVal.a */ }

如果您希望delegatedProp成为一个var,但是不管它分配给什么,都要继续执行“额外”操作,那么最简单的方法可能是定制getter:

代码语言:javascript
复制
var delegatedProp: (Int) -> Unit = { a -> Unit }
    get() = { a ->
        /* whatever you want to do with a */
        field(a)
    }

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56563540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档