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 )
是否可以在 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 )