什么权利kotlin范围函数设置属性的对象



当您已经初始化了一个对象时,用于为该对象设置多个属性的最佳kotlin scope函数是什么(我不需要返回对象的实例,只需要设置属性(

myObject.run {
text = "",
id = 0,
color = "#111111"
}

with(myObject) {
text = "",
id = 0,
color = "#111111"
}

myObject.apply {
text = "",
id = 0,
color = "#111111"
}

或者可能是";let"我有点困惑,因为所有的作用域函数都可以用来实现这一点,但哪一个是必须的?

我不需要返回对象的实例,只需要设置属性

所有作用域函数都返回一些内容。一些返回上下文对象(apply/all(,而另一些返回lambda结果(let/with/run(。如果您不需要返回值,可以忽略它们。

在这里,您希望更改myObject的属性,因此apply最有意义。它在lambda内部以this的形式提供上下文对象,并在执行lambda后返回对象本身。

使用withrun将返回Unit(这是lambda的结果(。既然你不在乎结果,你可以选择其中的任何一个,但正如我之前所说,apply在这里最有意义。

引用文档,

对于不返回值并且主要对接收器对象的成员进行操作的代码块,请使用apply。应用程序的常见情况是对象配置。这样的调用可以理解为"将以下赋值应用于对象">

run在lambda同时包含对象初始化和返回值计算时非常有用。

我们建议with在不提供lambda结果的情况下调用上下文对象上的函数。在代码中,用可以读作"用这个对象,做以下事情。">

Btw,如果myObject是一个数据类,我建议使用copy函数通过修改myObject的一些属性来创建一个新实例。

val newObject = myObject.copy(text = "", id = 0, color = "#111111")

最新更新