如何在 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" })
让我们假设一个简单的 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" })