Kotlin - делегировать как аргумент функции (анонимная реализация) - PullRequest
0 голосов
/ 10 апреля 2020

Возможно ли создать анонимный делегат в Kotlin с целью передачи аргумента функции? Меня особенно интересует by lazy, но этот вопрос, вероятно, относится ко всем делегатам. Например, скажем, у меня есть эта функция:

fun sayHello(name: String){
    println("Hello $name")
}

это прекрасно работает:

val name by lazy{ "Ralph" }
sayHello(name)

Но ни одно из следующего не верно:

sayHello(lazy{"Ralph"})
sayHello(by lazy{"Ralph"})
sayHello({"Ralph") as lazy})

Is это возможно как-то?

1 Ответ

0 голосов
/ 10 апреля 2020

Нет практического способа сделать это для любого общего делегата. Делегаты предназначены специально для использования со свойствами, поэтому их метод получения получает экземпляр объекта (владелец свойства) и аргумент KProperty (см. ReadOnlyProperty ). Им могут понадобиться эти ссылки для их функциональности.

У интерфейса Lazy есть свойство value, поэтому вы можете использовать его следующим образом, но это не относится ко всем делегатам:

sayHello( lazy{"Ralph"}.value )
...