gpt4 book ai didi

kotlin - .() 在 Kotlin 中是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 13:44:14 24 4
gpt4 key购买 nike

不确定这是什么意思,但我在 kotlin html 代码库中遇到了这种语法。 SCRIPT.() 是什么意思?

https://github.com/Kotlin/kotlinx.html/blob/master/shared/src/main/kotlin/generated/gen-tag-unions.kt#L143

fun FlowOrPhrasingOrMetaDataContent.script(type : String? = null, src : String? = null, block : SCRIPT.() -> Unit = {}) : Unit = SCRIPT(attributesMapOf("type", type,"src", src), consumer).visit(block)

SCRIPT 是一个类 - https://github.com/Kotlin/kotlinx.html/blob/master/shared/src/main/kotlin/generated/gen-tags-s.kt .

或者更一般地说,<ClassName>.() 是什么意思?在 Kotlin 中是什么意思?

最佳答案

快速解答

block: SCRIPT.() -> Unit = {}

这表示“带有接收器的函数文字”。它是一个函数参数,函数类型为 () -> UnitSCRIPT,因为它是 receiver

Function Literals/Lambda with Receiver

Kotlin 支持“带有接收器的函数文字”的概念。它允许访问其主体中 lambda 的接收器 的可见方法和属性,而无需任何特定限定符。这非常类似于扩展函数,其中还可以访问扩展内接收器对象的可见成员。

一个简单的例子,也是 Kotlin 标准库中最伟大的函数之一,是apply:

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }

如你所见,这样一个带有接收者的函数字面量在这里被当作参数block。这个 block 被简单地执行并返回接收者(它是 T 的一个实例)。实际情况如下:

val foo: Bar = Bar().apply {
color = RED
text = "Foo"
}

我们实例化一个 Bar 的对象并在其上调用 applyBar 的实例成为“接收者”。在 {}(lambda 表达式)中作为参数传递的 block 不需要使用额外的限定符来访问和修改显示的可见属性 color文本

带有接收器的 lambda 概念也是使用 Kotlin 编写 DSL 的最重要的特性。

关于kotlin - <ClassName>.() 在 Kotlin 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244734/

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