仅当为空时才分配变量

在Ruby上有这样的东西:

@var ||= 'value' 

基本上,这意味着@var只有在@var没有被赋值'value'才会被赋值(例如,如果@varnil

我在Kotlin上也是这么想的,但到目前为止,最接近的就是猫王操作员。 有没有这样的事情,我错过了文档?

我能想到的最简单的方法就是使用elvis算子:

 value = value ?: newValue 

如果经常这样做,另一种方法是使用一个委托属性 ,如果它的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 } } 

你现在可以创建一个像这样使用它的属性:

 var value by Once<String>() fun main(args: Array<String>) { println(value) // 'null' value = "1" println(value) // '1' value = "2" println(value) // '1' } 

请注意,这不是线程安全的,不允许设置回null 。 另外,这个确实评估了new表达式,而简单的elvis操作符版本可能不会。