讓f()
返回一個可爲空的值。null to listOf(),not null to listOf(value)in Kotlin in one liner?
我想要做的是,
如果f()
爲空,得到一個空列表,
否則,如果f()
不爲空,獲得單項value
的列表。
在Scala中,我們可以做這樣的事情:
Option(f()).toList
以上冗長
Option(f()).map(v => List(v)).getOrElse(List.empty)
在科特林,沒有Option
(假設沒有Funktionale庫),以及空沒有toList()
不像(None: Option
)在斯卡拉。
我們有埃爾維斯操作,但空將是listOf()
功能裏面,所以這將是
listOf(f() ?: /* What can I do here? */)
我們要爲空是什麼listOf(/*no argument */)
,但貓王運營商需要一個參數,所以listOf(f() ?:)
將導致在編譯錯誤。
至少我們可以做
val v = f()
if (v == null) listOf() else listOf(v)
,但它是一個兩個襯墊。
這是否有一些表達?
在哪裏,我會用這句話是在類的主構造默認參數,因此,如果它不是一個襯墊,它會用括號括起來,所以是這樣的:
class A(
val p1: List<V> = run {
val v = f()
if (v == null) listOf() else listOf(v)
},
val p2: ... = ...,
...)
這看起來相當醜,不是嗎?