gpt4 book ai didi

Kotlin 嵌套属性引用

转载 作者:行者123 更新时间:2023-12-02 13:03:19 25 4
gpt4 key购买 nike

data class House(var name: String = "House", var door: Door = Door())
data class Door(var name: String = "Door")

fun test() {
val testHouse = House("My house", Door(name = "My door"))
}

我怎样才能很好地和安全地获得嵌套的属性引用,理想情况下是这样的(虽然这不起作用):
   val houseDoorName = House::door::name
println(houseDoorName.get(testHouse)) //My door

我想我也许可以做扩展功能,比如: House::door.nested(Door::name)但我坚持执行。

最佳答案

对于您的假设 nested功能,试试这个:

fun <A, B, C> ((A) -> B).nested(getter : (B) -> C) : (A) -> C = { getter(this(it)) }

现在你可以完全按照你的要求做:
val houseDoorName = House::door.nested(Door::name)
val house = House(door = Door(name = "My door"))
println(houseDoorName(house)) // prints "My door"

你也可以链接它:
val doorNameLength = House::door.nested(Door::name).nested(String::length)

这里的巧妙技巧是 Kotlin 允许将属性引用视为函数的方式。
nested函数本质上是一个函数组合。它需要一个函数 a -> b和一个函数 b -> c ,并将它们组合成一个新函数 a -> c .你会经常发现它叫做 compose在标准库中。

Kotlin 没有标准的函数组合,但是如果您需要比这更复杂的东西,可以使用一些库。

关于Kotlin 嵌套属性引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com