Можно ли делегировать реализации методов - PullRequest
0 голосов
/ 17 января 2020

Дана функция, которая создает лямбды. Можно ли делегировать реализацию объявленной функции возвращаемой лямбде (аналог by -отделенных свойств). Если бы by существовало для функций, оно могло бы выглядеть так:

fun printFunCreator(message: String): () -> Unit  = { println(message) }
fun printHelloWorld() by printFunCreator("Hello world")

Что я не ищу:

Я делаю не хочу создать дополнительный свойство лямбды для делегирования вызова следующим образом:

fun printFunCreator(message: String): () -> Unit  = { println(message) }
val printFun = printFunCreator("Hello world")
fun printHelloWorld() = printFun.invoke()

И я не хочу создать новый экземпляр лямбды для каждого выполнения следующим образом:

fun printFunCreator(message: String): () -> Unit  = { println(message) }
fun printHelloWorld() = printFunCreator("Hello world").invoke()

Ответы [ 2 ]

0 голосов
/ 17 января 2020
fun printFunCreator(message: String): () -> Unit  = { println(message) }
val printHelloWorld = printFunCreator("Hello World")

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

printHelloWorld()

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

0 голосов
/ 17 января 2020

Описание того, что вы хотите, звучит как простое выполнение этого:

fun printFunCreator(message: String) { println(message) }
fun printHelloWorld() = printFunCreator("Hello world")

Если нет какой-либо причины, printFunCreator() должен вернуть лямбду ...?

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