gpt4 book ai didi

kotlin - Kotlin中的Typealias和扩展功能

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

我是完全的Kotlin新手,我需要一些帮助来理解以下代码。这是我在网上找到的 Kotlin 帖子

typealias genericContext<T> = Demo<T>.() -> Unit
class Demo<T> {
infix fun doThis(block: genericContext<T>) = block()
fun say(obj: T) = println(obj.toString())
}

fun main(args: Array<String>)
{
val demo = Demo<String>()

demo doThis { say("generic alias") }
}

所以我知道由于 infix,我们可以跳过通常的方法调用语法,即 demo.doThis并执行 demo doThis
但是我不明白以下几点: typealias genericContext<T> = Demo<T>.() -> Unit这似乎将字符串 genericContext<T>与看起来像lambda的东西相关联,但我没有得到 .()部分。那用函数 Demo扩展了 ()?我对这是如何工作感到困惑。有人可以照亮吗?

最佳答案

typealias genericContext<T> = Demo<T>.() -> Unit是类型别名。它只是在右侧给类型重新命名。这意味着doThis中的Demo声明与此等效:

infix fun doThis(block: Demo<T>.() -> Unit) = block()

现在输入 Demo<T>.() -> Unit类型:
这是一种功能类型。此类型的函数将 Demo作为其接收方参数,并返回 Unit。因此,它是在 Demo类中定义或在 Demo类中扩展的所有函数的类型。

当您提供这种类型的lambda时(例如,当您调用 doThis函数时),那么 this将指向lambda内部的 Demo -object。例如:
someDemo.doThis {
/* "this" is an object of type `Demo`.
* In this case it's actually "someDemo", because the implementation of "doThis"
* calls "block" on the implicit "this".
*/
this.say("Hey!")
}

关于kotlin - Kotlin中的Typealias和扩展功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54709311/

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