问题标签 [kotlin-contracts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
96 浏览

kotlin - Kotlin 空值检查编译器合约如何工作?

我有几个自定义范围函数,它们看起来都类似于这个:

它与 apply(...) 具有相同的效果,但只有在满足条件时才会执行该块。该功能非常有效,但有一个警告。例如,如果条件包含空检查,则这些非空保证不会转换为被执行的块。

例如:

上面会导致编译器警告,因为我使用的源代码没有 ?: 和 !! 运营商。IntelliJ 工具提示说

在 LogSource 类型的可空接收器上只允许安全 (?.) 或非空断言 (!!.) 调用?(源变量的类型为 LogSource)

获得与这种情况相同的行为的最佳方法是什么:

我想使用谓词或提供者而不是布尔值将是第一步,但是正确的合同语法是什么语法上说“如果条件包含空检查,则确认的非空值在块中和整个块中都是有效的除非改变”?