在Ruby上有一个像这样的东西:
@var ||= 'value'
Run Code Online (Sandbox Code Playgroud)
基本上,这意味着只有在尚未@var分配时'value'才会@var被分配(例如,如果@var是nil)
我在Kotlin上寻找同样的东西,但到目前为止,最接近的是elvis运营商.有没有这样的东西,我错过了文档?
nha*_*man 21
我能想到的最短路径确实是使用elvis运算符:
value = value ?: newValue
Run Code Online (Sandbox Code Playgroud)
如果经常这样做,另一种方法是使用委托属性,该属性仅存储以下值null:
class Once<T> {
private var value: T? = null
operator fun getValue(thisRef: Any?, property: KProperty<*>): T? {
return value
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) {
this.value = this.value ?: value
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以创建一个使用它的属性,如下所示:
var value by Once<String>()
fun main(args: Array<String>) {
println(value) // 'null'
value = "1"
println(value) // '1'
value = "2"
println(value) // '1'
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不是线程安全的,不允许重新设置null.此外,这确实评估new表达式,而简单的elvis运算符版本可能不会.
| 归档时间: |
|
| 查看次数: |
8118 次 |
| 最近记录: |