簡體   English   中英

在 Kotlin `when` 語句(或其他分支構造)中包含函數或 lambda 作為條件的最簡潔方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM