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

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在处理字符串,我遇到了正则表达式或通配符答案:可以将正则表达式放在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 开发人员会做什么?

问题暂未有回复.您可以查看右边的相关问题.
1 编写2布尔条件(4个分支)的最简洁方法

我有这个代码。 true_var和other_true_var是boolean值。 四个条件分支是不同的。 是否有“接受”的方式来写这个? 我可以将所有条件转换为返回布尔值的方法,但这似乎超过了顶部。 ...

2 使用匿名函数最简洁的方法是什么?

我已经开始更多地使用Javascript了,因此我写的东西很复杂,组织正成为一个问题。 但是,此问题适用于允许您嵌套函数的任何语言。 基本上,什么时候应该在命名的全局或内部函数上使用匿名函数? 起初我认为这是有史以来最酷的功能,但我想我会过火了。 这是我最近写的一个例子,省略了所有变 ...

2010-05-21 14:55:59 3 155   lambda
4 Kotlin:“When 语句”跳过条件

我正在尝试使用 Kotlin 在 android 中验证表单。 我的问题是,我的when statement无法正常工作。 当其他条件已经为真时,它不会检查其他条件。 代码 我希望我的问题有意义。 也许我没有正确理解when statements 。 这是否可能不起作用,因为: 如果用作 ...

5 Oracle SQL:将WITH…SELECT…重构为函数的最简洁方法是什么

因此,我一直在尝试寻找最佳方法来以以下形式在计划脚本中重写大量SQL: 进入功能。 这主要是为了便于在多个位置重用该大块表示的相同逻辑。 约束1:只能使用RECORD而不是创建自定义的TYPE; 约束2:必须将这些子查询(例如,等)的内容保持在WITH子句下,因为每个 ...

6 在我的 AWS 查询函数中使用 Promise 的最简洁方法是什么?

我觉得我目前对这个函数的实现很混乱,我希望让它更干净。 我在网上看过例子,有很多不同的方式来使用 Promise。 我不确定哪种方式最适合这种情况。 我查看了AWS 文档示例,但他们使用的是if else语句。 有时它不会返回我需要的结果,所以这就是我求助于使用 Promise 的原因。 我还查看 ...

7 在Ruby中链接流函数的最简洁方法是什么?

假设我有一系列我希望执行各种古怪操作的东西。 例如: 我想过滤掉12岁以下的人,将所有名称更改为符号,然后按年龄排序(比方说)。 这可以通过以下方式实现: 所以这都是花花公子。 但是,如果我有任意复杂的逻辑,我需要做我的选择/映射/排序/等等。 标准做法是要避免使 ...

2017-06-14 09:13:10 1 46   ruby
9 在 Keras 中将两个立体图像传递给损失函数的最简洁、最有效的方法是什么?

首先,我为什么要使用 Keras? 我试图保持尽可能高的水平,这并不意味着我害怕低水平的 Tensorflow; 我只是想看看我能走多远,同时保持我的代码尽可能简单和可读。 我需要我的 Keras 模型(使用 Keras 功能 API 定制)从立体对中读取左侧图像并最小化需要访问右侧和左侧图像的损 ...

10 避免使用模板分支的最简洁方法

我有一个 cuda 内核,它采用一些bool模板参数,这些参数有助于显式优化内核中未使用的部分。 我想知道是否有比下面的解决方案更清晰/更紧凑的内核调用实例化方法。 设备模板 template <bool pred1, bool pred2> __global__ void foo(a ...

2020-11-06 16:48:13 1 119   c++/ cuda
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM