繁体   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