nullである場合にのみ、このようなものがあります:割り当て変数、それはRubyの1に
@var ||= 'value'
を基本的には、それが(@var
がnil
ある場合など)を@var
がまだ割り当てられていない場合にのみ@var
は'value'
が割り当てられますことを意味し
私はKotlinで同じものを探していますが、これまでのところ、最も近いものはelvis演算子です。そんなことがありますか?私は文書を見逃しましたか?私は考えることができる
nullである場合にのみ、このようなものがあります:割り当て変数、それはRubyの1に
@var ||= 'value'
を基本的には、それが(@var
がnil
ある場合など)を@var
がまだ割り当てられていない場合にのみ@var
は'value'
が割り当てられますことを意味し
私はKotlinで同じものを探していますが、これまでのところ、最も近いものはelvis演算子です。そんなことがありますか?私は文書を見逃しましたか?私は考えることができる
最短の方法は、実際にエルビス演算子を使用している:
value = value ?: newValue
これを頻繁にする場合、代替がそのnull
場合にのみ値を格納delegated propertyを、使用することです。
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演算子のバージョンはそうではありません。
偉大な洞察力!ありがとうございました –
おそらく 'class Once
@ RuckusT-Boomそれはなぜですか?今はnull可能な型を受け付けていますが、使い方に違いはありません。 – nhaarman
あなたは[lazy](https://kotlinlang.org/docs/reference/delegated-properties.html#lazy)のようなものをお探しですか? – nhaarman
ええと、実際はそうではありません...私の場合、 'prePersist' JPAフックに' uid'を割り当てたいのですが、 'uid'がnullで、assign –
私は 'value = value?:newValue'は本当に最短の方法だと思います。 – nhaarman