带时缀功能-有可能吗?

时间:2018-08-29 13:07:15

标签: kotlin

是否可以在when语句中使用infix函数。与此类似:

infix fun Int.isGreater(value: Int): Boolean = this > value

然后:

when (value) {
    isGreater 2 -> doSomething()
    isGreater 1 -> doSomethingElse()
    else -> doNothing()
}

2 个答案:

答案 0 :(得分:0)

您不能像您一样调用infix函数。它总是需要在左侧的接收器:

when {
    value isGreater 2 -> doSomething()
    value isGreater 1 -> doSomethingElse()
    else -> doNothing()
}
  

请注意,中缀函数始终都需要同时指定接收方和参数。当您使用后缀符号在当前接收方上调用方法时,您需要显式使用此方法。与常规方法调用不同,它不能被忽略。

答案 1 :(得分:0)

实际上:不,这不起作用。在查询when grammar时可以看到原因,该查询不具有接受when的值并在其上调用whenCondition的函数的构造。因此,它与infix本身无关(确实,它的左边需要一个接收器)。

您可以执行以下操作:

when {
  value isGreater 2 -> ...
  value.isGreater(1) -> ...

如果愿意,您还可以在Kotlin reference中阅读有关when的更多信息。