Инфиксная функция с когда - это возможно? - PullRequest
0 голосов
/ 29 августа 2018

возможно ли использовать инфиксную функцию с оператором when. Нечто похожее на это:

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

и затем:

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

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

На самом деле: нет, это не будет работать. Причину можно увидеть при обращении к грамматике when , которая не имеет конструкции, которая принимает значение, присвоенное when, и вызывает для него функции whenCondition. Так что это не связано с самим infix (хотя это правда, что ему нужен приемник слева).

Вы могли бы сделать следующее:

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

Если хотите, вы также можете прочитать больше о when в справочнике Kotlin .

0 голосов
/ 29 августа 2018

Вы не можете вызывать инфиксные функции, как вы. Всегда нужен приемник с левой стороны:

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

Обратите внимание, что для инфиксных функций всегда требуется указывать и приемник, и параметр. Когда вы вызываете метод на текущем получателе, используя инфиксную нотацию, вы должны использовать это явно; в отличие от обычных вызовов методов, его нельзя опускать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...