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