自定义Kotlin时的表达式
我对Kotlin很陌生,我想要的是:自定义Kotlin时的表达式,kotlin,Kotlin,我对Kotlin很陌生,我想要的是: when_assert_no_else { CONDITION0 -> { doSomething0() } CONDITION1 -> { doSomething1() } } 这就像 when { CONDITION0 -> { doSomething0() } CONDITION1 -> { doSometh
when_assert_no_else {
CONDITION0 -> {
doSomething0()
}
CONDITION1 -> {
doSomething1()
}
}
这就像
when {
CONDITION0 -> {
doSomething0()
}
CONDITION1 -> {
doSomething1()
}
else -> {
throw RuntimeException()
}
}
后一个代码片段在我的项目中出现了很多时间,我想通过抛出异常断言控制流没有到达else
块
或者,是否可以通过提供when\u assert\u no\u else
的实现来定制when
关键字
有什么想法吗?谢谢。由于kotlin没有
->
操作符,您无法编写上述代码,但您可以做出一些妥协,例如:使用Pairbolean,()->t>
fun test(): Int = when_assert_no_else(
{ true } to { 1 },
{ false } to { 2 }
)
fun <T> when_assert_no_else(vararg cases: Pair<() -> Boolean, () -> T>): T {
// v--- short-circuiting terminal operation
return cases.find{ it.first() }
.let { it ?: throw RuntimeException() }
.second()
}
fun test():Int=when\u assert\u no\u else(
{true}到{1},
{false}到{2}
)
当你断言你没有其他(vararg情况:成对布尔,()->T>)时的乐趣:T{
//v---短路终端操作
返回cases.find{it.first()}
.let{it?:抛出RuntimeException()}
.second()
}
我也想到了holi java的解决方案,但它可能不足以满足所有场景。例如,考虑分支中的副作用。
您还可以做的是“抽象”else分支。我的意思是创建一个(静态)类,并在断言时添加一个方法。在_-when\u-assert\u-else\u方法中,添加要在then-when的else分支中执行的代码。与当前策略相比的优势在于,当您想要更改else分支时,您必须检查所有代码并将其更改x次。对于函数调用,您只需修改一次