Kotlin аргумент функции как приостановленный - PullRequest
0 голосов
/ 19 апреля 2020

В настоящее время в моем коде есть следующее

fun use(consumer: (T) -> Unit) {
    consumer(this.value)
}

suspend fun useS(consumer: suspend (T) -> Unit) {
    consumer(this.value)
}

Это 2 метода, которые фактически делают то же самое. Однако мне не удалось ни объединить их в один, ни использовать перегруженный метод. В некоторых местах мой потребительский аргумент является обычной функцией, в других местах это suspend function; У меня нет над этим контроля.

Можно ли иметь только один метод, независимо от "приостановки" моего потребителя?

РЕДАКТИРОВАТЬ: забыл упомянуть, что this.value равно private и, следовательно, использование inline не будет работать - тем не менее, я контролирую это, поэтому может изменить видимость поля value.

1 Ответ

2 голосов
/ 20 апреля 2020

ЕСЛИ код действительно такой простой, как вы его предоставили, просто использование не приостановленной версии и сделать ее inline решит ваши проблемы.

Сделав его встроенным (и, таким образом, указав потребителю) ) это позволяет внутреннему блоку использовать вызывающую среду вызывающей стороны. Вот почему все вспомогательные функции библиотеки, такие как also, могут использоваться в функции приостановки и вызывать функции приостановки без явного определения самих функций приостановки.

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