我正在看这个Kotlin对象声明:
object A : B({
variableName1 = "text1"
variableName2 = "text2"
params {
param("Foo", "Bar")
}
})
我无法弄清楚B类构造函数的参数是什么。
我故意在这个例子中抽象出信息,但B类实际上是
jetbrains.buildServer.configs.kotlin.v10.BuildType
我找不到该类型的文档。 I have found something that was close但它是接口的定义,因此没有构造函数。
总结一下,Kotlin的以下构造是什么?
{
variableName1 = "text1"
variableName2 = "text2"
params {
param("Foo", "Bar")
}
}
答案 0 :(得分:9)
此构造称为"Lambda with Receiver",又名“带接收器的函数文字”,您可以在Kotlin DSL实现中广泛使用它。例如,请查看HTML builder DSL。
我在this主题中详细描述了整个概念。
答案 1 :(得分:0)
尝试用接收器类型解释函数字面量/ 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:这些带有接收器类型的 lambda 表达式类似于 IMO 的扩展函数。