gpt4 book ai didi

syntax - Kotlin:访问 when 语句的参数

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

有没有办法获取我传递给 when 语句的表达式的值?

在我的应用程序中,我有一个类似的 KeyListener

_content.addKeyListener(object : KeyAdapter() {
override fun keyPressed(e: KeyEvent?) = when(e?.keyCode) {
KeyEvent.VK_T -> mainWindow.enterTrainingState()
KeyEvent.VK_P -> mainWindow.enterPlayState()
KeyEvent.VK_E -> mainWindow.close()
else -> println(e?.keyCode)
}
})

Kotlin 是否有一种简洁的语法来访问 e?.keyCode?我真的不想重复这个表达。

最佳答案

几天前我自己也遇到了这个问题。我认为能够在 when-表达式中以 it 的形式访问该值会很好。

我通过在 when 表达式之前将表达式分配给 val 来解决它:

val keyCode = e?.keyCode
when(keyCode) {
KeyEvent.VK_T -> mainWindow.enterTrainingState()
KeyEvent.VK_P -> mainWindow.enterPlayState()
KeyEvent.VK_E -> mainWindow.close()
else -> println(keyCode)
}

不幸的是,这将需要您添加额外的大括号和行。不过,好处是 e?.keyCode 只会被评估一次。在这种确切情况下可能无关紧要,但如果表达式更大,这种方法将是合适的。

编辑:

另一种可能性是将 when 表达式包装在对 let 的调用中。它允许您使用 it 访问参数。像这样:

e?.keyCode.let {
when(it) {
KeyEvent.VK_T -> mainWindow.enterTrainingState()
KeyEvent.VK_P -> mainWindow.enterPlayState()
KeyEvent.VK_E -> mainWindow.close()
else -> println(it)
}
}

编辑2:

Kotlin 1.3 支持在变量中捕获 when 的主题表达式。这是语法:

when(val keyCode = e?.keyCode) {
KeyEvent.VK_T -> mainWindow.enterTrainingState()
KeyEvent.VK_P -> mainWindow.enterPlayState()
KeyEvent.VK_E -> mainWindow.close()
else -> println(keyCode)
}

关于syntax - Kotlin:访问 when 语句的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41979945/

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