不知道这是什么意思,但我在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.
或者更一般地说,
是什么。()在科特林是什么意思?
它被称为带接收器的函数文字(或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的扩展函数。
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类之一。但是周围的括号告诉了我什么呢?
我对科特林是新来的。我想知道下面代码中这两个和之间的区别。 下面有两个片段:第一个片段使用表示,另一个片段使用表示相同的变量。