gpt4 book ai didi

android - kotlin合约的目的是什么

转载 作者:行者123 更新时间:2023-12-02 12:01:33 24 4
gpt4 key购买 nike

正在阅读apply函数代码源码,发现

contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}

和契约(Contract)有一个空的 body ,实验
@ContractsDsl
@ExperimentalContracts
@InlineOnly
@SinceKotlin("1.3")
@Suppress("UNUSED_PARAMETER")
public inline fun contract(builder: ContractBuilder.() -> Unit) { }

的真正目的是什么契约(Contract) 它会留在下一个版本中吗?

最佳答案

What is the real purpose of contract



Kotlin 的真正目的 契约(Contract) 是帮助编译器做出一些自己无法做出的假设。有时,开发人员比编译器更了解某个特性的用法,并且可以将特定用法传授给编译器。

我将以 callsInPlace 为例既然你提到了。

想象一下有以下功能:

fun executeOnce(block: () -> Unit) {
block()
}

并以这种方式调用它:

fun caller() {
val value: String
executeOnce {
// It doesn't compile since the compiler doesn't know that the lambda
// will be executed once and the reassignment of a val is forbidden.
value = "dummy-string"
}
}

这里 Kotlin 契约(Contract) 进来帮忙。您可以使用 callsInPlace教编译器该 lambda 将被调用多少次。

@OptIn(ExperimentalContracts::class)
fun executeOnce(block: ()-> Unit) {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
}

@OptIn(ExperimentalContracts::class)
fun caller() {
val value: String
executeOnce {
// Compiles since the val will be assigned once.
value = "dummy-string"
}
}

is it here to stay in the next versions?



谁知道。一年后它们仍处于试验阶段,这对于主要功能来说是正常的。你不能 100% 确定它们会退出实验,但由于它们很有用,而且它们已经存在一年了,在我看来,它们很可能会退出实验。

关于android - kotlin合约的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60958843/

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