[英]What is the most concise way to include functions or lambdas as conditions in a Kotlin `when` statement (or other branching construct)?
我正在處理字符串,我遇到了正則表達式或通配符答案:可以將正則表達式放在when
語句中,並使用覆蓋等於的自定義 class。 雖然這確實有效地使用類型系統將語法糖塞入when
語句中,但我發現以下內容非常丑陋,並且永遠不會在我打算與其他開發人員共享的代碼中這樣做(引用travis ):
import kotlin.text.regex
when (RegexWhenArgument(uri)) {
Regex(/* pattern */) -> /* do stuff */
Regex(/* pattern */) -> /* do stuff */
/* etc */
}
RegexWhenArgument 最低定義為:
class RegexWhenArgument (val whenArgument: CharSequence) {
operator fun equals(whenEntry: Regex) = whenEntry.matches(whenArgument)
override operator fun equals(whenEntry: Any?) = (whenArgument == whenEntry)
}
(結束報價)
我認為將 arg 傳遞給when
然后引用對 arg 類型進行操作的函數會更具可讀性。 舉一個人為的例子:
// local declaration
val startsWithFn: (String) -> Boolean = {s -> s.startsWith("fn:")}
when(givenString) {
::startsWithHelp -> printHelp()
startsWithFn -> println("Hello, ${givenString.substring(3)}!")
}
// package level function
fun startsWithHelp(s:String) = s.startsWith("help", true)
但當然,這段代碼無法編譯。 有沒有一種可讀、可維護和簡潔的方法來做到這一點? 也許使用流? 經驗豐富的 Kotlin 開發人員會做什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.