是否可以将中缀函数与 when 语句一起使用。类似于这样的东西:
infix fun Int.isGreater(value: Int): Boolean = this > value
然后:
when (value) {
isGreater 2 -> doSomething()
isGreater 1 -> doSomethingElse()
else -> doNothing()
}
实际上:不,这是行不通的。在查阅when
语法时可以看到原因,该语法没有一个结构来获取给定when
的值并在其上调用whenCondition
函数。因此,它与infix
本身无关(尽管它确实需要在左侧安装接收器(。
您可以执行以下操作:
when {
value isGreater 2 -> ...
value.isGreater(1) -> ...
如果您愿意,还可以在 Kotlin 参考中阅读有关when
的更多信息。
不能像现在这样调用中缀函数。它总是需要在左侧有一个接收器:
when {
value isGreater 2 -> doSomething()
value isGreater 1 -> doSomethingElse()
else -> doNothing()
}
请注意,中缀函数始终需要同时指定接收器和参数。当您使用中缀表示法在当前接收器上调用方法时,您需要显式使用它;与常规方法调用不同,它不能省略。