如何在 Kotlin 中匿名传递 Delegated 属性?

How to pass Delegated property anonymously in Kotlin?

让我们假设一个简单的 class:

class Foo(val p:String)

我想通过传递 lazy delegate:

来创建 class 的实例
val lazyP by lazy {"foo"}
println(Foo(lazyP).p)

但我不需要样板 lazyP 变量。如何写一行?类似于:

println(Foo(by lazy {"foo"}).p)

我猜你想做的是构建 Foo 并让 p 仅在首次调用时计算?如果是这样,我不认为像您所做的那样定义 Foo 会起作用,因为当您构造 Foo 时,将调用惰性委托。那是因为为了构造 Foo,需要一个字符串,所以惰性委托在那个时候被评估。换句话说,这个:

val lazyP by lazy { "foo" }
val foo = Foo(lazyP)

大致等同于:

val foo = Foo("foo")

我认为如果你想 Foo 有一个惰性委托 属性 你应该这样定义它:

class Foo(lazyP: Lazy<String>) {
    val p by lazyP
}

然后你可以在一行中构造它而不需要单独的变量:

val foo = Foo(lazy { "foo" })