在Gradle'中混淆财产委托;s Kotlin DSL
下面是我在gradle的文档中看到的代码片段在Gradle'中混淆财产委托;s Kotlin DSL,kotlin,gradle,gradle-kotlin-dsl,Kotlin,Gradle,Gradle Kotlin Dsl,下面是我在gradle的文档中看到的代码片段 val hello by tasks.registering { doLast { println("Hello Earth") } } hello { doFirst { println("Hello Venus") } } 在上面的示例中,hello是一种TaskProvider类型,它提供任务定义/操作。对hello的第二个调用是扩展任务的行为 我觉得这个代理的用法有点混乱。以
val hello by tasks.registering {
doLast {
println("Hello Earth")
}
}
hello {
doFirst {
println("Hello Venus")
}
}
在上面的示例中,hello是一种TaskProvider类型,它提供任务定义/操作。对hello的第二个调用是扩展任务的行为
我觉得这个代理的用法有点混乱。以下是困扰我的问题:
1) 在检查反编译的字节码时,我看到tasks.registing返回RegisteringDomainObjectDelegateProviderWithAction对象,该对象应用作委托,因此应提供getValue()和setValue()方法以使委托正常工作,但如我所见,未提供方法。相反,类RegisteringDomainObjectDelegateProviderWithAction具有类型为tasks的属性,该属性应提供委托。有谁能帮助我理解授权是如何运作的
2) 第二个调用应该向hello任务添加行为。既然hello是一个属性,我们如何能够将lambda/行为传递给它?我错过了什么
我已经看过kotlin文档,它为学员提供了很好的解释,但无助于理解上述情况
我希望能得到详细的解释,因为我是科特林的新手
ProviderDeleteGate
:
operator fun RegisteringDomainObjectDelegateProviderWithAction<out TaskContainer, Task>.provideDelegate(
receiver: Any?,
property: KProperty<*>
) = ExistingDomainObjectDelegate.of(
delegateProvider.register(property.name, action)
)
基本上,调用hello{/*您的lambda*/}
被分解为hello.invoke{/*您的lambda*/}
对于第二个调用,您可以查找运算符重载。见:
operator fun <T> NamedDomainObjectProvider<T>.invoke(action: T.() -> Unit) =
configure(action)