Как использовать функции расширения, определенные в интерфейсе Kotlin - PullRequest
0 голосов
/ 05 марта 2019

В Kotlin можно объявить функцию расширения в интерфейсе, подобном этому:

interface Evaluator {
  fun Double.evaluateY1(): Double
  fun Double.evaluateY2(): Double
}

class EvaluatorImpl : Evaluator {
    override fun Double.evaluateY1(): Double {
        return this + 2.0
    }

    override fun Double.evaluateY2(): Double {
        return this + 3.0
    }
}

Имея получатель и экземпляр интерфейса, как мне вызвать такую ​​функцию расширения?

Я придумал трюк с функцией охвата with, но я бы предпочел что-то с меньшим отступом.

fun usageExample(evaluator: Evaluator, x: Double) {
  with(evaluator) {
    println("Y1 = ${x.evaluateY1()}. Y2 = ${x.evaluateY2()}")
  }
}

1 Ответ

3 голосов
/ 05 марта 2019

Невозможно заставить его работать, не выходя за рамки вашего интерфейса.Использование with является рекомендуемым решением.Вы можете использовать тело выражения, чтобы сделать его более кратким:

fun usageExample(evaluator: Evaluator, x: Double) = with(evaluator) {
    println("Y1 = ${x.evaluateY1()}. Y2 = ${x.evaluateY2()}")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...