当前位置: 首页 > 知识库问答 >
问题:

什么是。()在科特林是什么意思?

闾丘昊然
2023-03-14

不知道这是什么意思,但我在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)

剧本是一种https://github.com/Kotlin/kotlinx.html/blob/master/shared/src/main/kotlin/generated/gen-tags-s.kt.

或者更一般地说,


共有2个答案

池兴邦
2023-03-14

是什么。()在科特林是什么意思?

它被称为带接收器的函数文字(或lambda)

尝试解释相同的示例:

data class Person(val name: String)

fun getPrefixSafely(
    prefixLength: Int,
    person: Person?,
    getPrefix: Person.(Int) -> String): String
{
    if (person?.name?.length ?: 0 < prefixLength) return ""
    return person?.getPrefix(prefixLength).orEmpty()
}

// Here is how getPrefixSafely can be called
getPrefixSafely(
    prefixLength = 2,
    person = Person("name"),
    getPrefix = { x -> this.name.take(x) }
)

PS:这些具有接收器类型的函数文字类似于IMO的扩展函数

蒋茂
2023-03-14
block: SCRIPT.() -> Unit = {}

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

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

一个简单的例子,也是静态编程语言标准库中最伟大的函数之一,是应用

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

如您所见,这种带接收器的函数文字在这里被视为参数块。简单地执行该块,并返回接收器(它是T的实例)。实际情况如下:

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

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

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

 类似资料:
  • 如果我在android studio中为retrofit2 enqueue调用生成回调代码,我将得到 我的retrofit2接口中的代码只是 通常在Kotlin中只是表示nullable,这对于其他类型是有意义的。但是这种类型和仅仅有什么不同?

  • 我正在用Android Studio将Java转换为Kotlin。我在实例变量后得到双bang。什么是双爆炸,更重要的是,这在哪里被记录?

  • 我正在维护一个用静态编程语言和Spring Boot编写的微服务系统,在一些代码中,我发现!!语法,我不知道它的意思: 状态是上述函数的响应。有人可以向我解释一下吗!意思是,它在这种情况下有什么用?提前致谢!!!

  • 问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如

  • 我还可以看到在上面所示的布尔上下文中的行为类似于nil-返回false。 我发现很有趣。文档告诉我,只是Raku中的god类之一。但是周围的括号告诉了我什么呢?

  • 我对科特林是新来的。我想知道下面代码中这两个和之间的区别。 下面有两个片段:第一个片段使用表示,另一个片段使用表示相同的变量。