我想為我的描述顯示非空值,但由于某種原因,本機函式出現問題,我不明白為什么。
代碼:
val formattedDesc = listOfNotNull(boardingZone, accessPoint, duration, description).joinToString { " ? " }
這應該顯示如下字串:"120 ? A3 ? 30 minutes ? Ticket"
如果其中一些字串為空,則不應存在。
但是這個函式正在回傳這個值:"?, ?"
uj5u.com熱心網友回復:
通過呼叫.joinToString { " ? " },您將{ " * "}作為最終的功能引數傳遞,所有其他引數都是它們的默認值。所以看joinToString它的簽名是:
public fun <T> Iterable<T>.joinToString(separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = "", limit: Int = -1, truncated: CharSequence = "...", transform: ((T) -> CharSequence)? = null)
所以分隔符、前綴、后綴、限制和截斷都是默認值,transform它們{ " ? " }在非空串列的每個元素上運行。因此,任何非空值都將替換為“ ? ”,這就是您所看到的輸出。
我猜你實際上想要:
listOfNotNull(boardingZone, accessPoint, duration, description).joinToString(" ? ")
甚至更好地使用:
listOfNotNull(boardingZone, accessPoint, duration, description).joinToString(separator = " ? ")
這樣您和您的代碼的讀者都可以確定傳遞的是什么引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523745.html
標籤:科特林
