gpt4 book ai didi

Kotlin 的 when 语句中的正则表达式或通配符?

转载 作者:IT老高 更新时间:2023-10-28 13:45:12 25 4
gpt4 key购买 nike

我正在使用 Kotlin 开发一个 RESTful 应用程序,并且对于路由器,我使用了 when 语句,因为它是最易读和好看的条件语句。

有没有办法在字符串的 when 语句中使用正则表达式或通配符?

(这样“/article/get/”之类的 URI 都将传递给同一个 Controller )

我的路由器结构如下:

when(uri) {
"some/url" -> return SomeController(config).someAction(session)
}

最佳答案

是的。

import kotlin.text.regex

val regex1 = Regex( /* pattern */ )
val regex2 = Regex( /* pattern */ )
/* etc */

when {
regex1.matches(uri) -> /* do stuff */
regex2.matches(uri) -> /* do stuff */
/* etc */
}

您也可以使用 containsMatchIn如果这比 matches 更适合您的需要.

说明:

when 的测试表达式声明是可选的。如果没有包含测试表达式,则 when 语句的功能类似于 if-else if 链,其中 whenCondition每个 whenEntry应独立评估为 bool 值。


编辑:

所以我想了一会儿,想出了一个不同的方法,可能更接近你想要的。

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)
}

这种方法可以让您尽可能接近“argument-ful”when 表达式语法。我认为它尽可能地精简和可读(假设您在其他地方定义了 RegexWhenArgument 类)。

这种方法使用类似于访问者设计模式的东西并结合 Kotlin 的运算符重载来重新定义构成 when 表达式参数和 whenEntry 之间“匹配”的内容。如果你真的想要,我想你可以更进一步,将 RegexWhenArgument 生成一个通用的 WhenArgumentWhenArgumentDecorator 允许您可以在 when 表达式中为任何类型的类型指定自定义“匹配”条件,而不仅仅是正则表达式。

关于Kotlin 的 when 语句中的正则表达式或通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41270732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com