仅在为空时分配变量

路易斯·E。

在Ruby上有这样的东西:

@var ||= 'value' 

基本上,这意味着@var将被分配'value',如果仅@var尚未分配(例如,如果@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运算符版本可能不会。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅在非零时分配变量

仅在bash中为空时分配关联数组值

是否可以将字符串 $x = "foo" 与名为 $foo 的变量匹配并仅在匹配时分配值?

SwiftUI @State 变量未及时分配

仅在不为零时分配值

仅在为空时更新列字段(PostgreSQL)

仅当源变量不为null时分配的最短方法

运行时分配的函数中的const变量

仅在JavaScript中的三元运算符中条件为true时分配

变量仅在for循环内本地分配

使droppable元素仅在为空时才接受可拖动对象

如何仅在不为空时设置变量?

UnboundLocalError:在为Simbols Fixer分配Python之前引用了局部变量'X'

在for循环中组合两个列表时分配变量列表名称python

删除切片中的元素时分配给新变量会产生意外结果

如何在Java脚本函数中传递多个ID时分配变量?

是否可以在运行时分配const变量?C#

语法错误-无法在设置变量时分配给运算符

C 中变量声明和定义之间的区别。内存何时分配?

如何处理空列表,List Alternated[0] 在为 C2 分配空值时抛出异常

2种方式绑定ngModel的更改也反映在其分配的temp变量中(在页面加载时分配)

在Go中同时分配

使用 **kwargs 时分配 *args

使用setx分配空的系统变量

Javascript分配变量并检查不为空

类型为空,无法分配变量?

在Snowflake中,为什么同时分配两个变量时,这些变量有256个字节的限制?

使用.SD将函数应用于data.table中的多个变量时分配新变量

仅在点击时分发到道具