Kotlin - 委托作为函数参数(匿名实例化)

Kotlin - delegate as function argument (anonymous instantiation)

是否可以在 Kotlin 中创建匿名委托以传递给函数参数?我对 by lazy 特别感兴趣,但这个问题可能适用于所有代表。例如,假设我有这个功能:

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

这很好用:

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

但以下 none 个是正确的:

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

这有可能吗?

对于任何一般代表来说,都没有一种实用的方法可以做到这一点。委托专为与属性一起使用而设计,因此它们的 getter 实现需要一个对象实例(属性 所有者)和一个 KProperty 参数(参见 ReadOnlyProperty)。他们可能特别需要这些参考来实现他们的功能。

Lazy接口恰好有一个value属性所以你可以这样使用它,但这并不适用于所有委托:

sayHello( lazy{"Ralph"}.value )