gpt4 book ai didi

kotlin - Kotlin 合约能否/会表达已删除的类型含义?

转载 作者:行者123 更新时间:2023-12-02 12:52:39 25 4
gpt4 key购买 nike

我想告诉编译器,如果一个函数返回,它的一个参数是给定类型的。

契约(Contract)似乎给了我这种权力,但是当我想发出一个其他被删除的类型的信号时,它就不起作用了。

@ExperimentalContracts
fun <T> List<T>.isListOfInt(): Boolean {
contract {
returns(true) implies (this@isListOfInt is List<Int>)
}
return TODO("some way that I know")
}

这失败了,因为 this@isListOfInt is List<Int>无法编译 - Cannot check for instance of erased type: List<Int> .

我知道当前的合约规范是 Kotlin DSL,因此受到此限制,但同时能够暗示以其他方式删除的类型将非常强大。

现在有什么方法可以实现这种效果,或者在 future 的契约(Contract)实现中是否有可能?

最佳答案

我为具有具体类型参数的案例编写了一个功能请求。
例如。

@ExperimentalContracts
// would be pretty useful for custom equals-methods.
inline fun <reified T:Any> T.hasSameClassAs(other: Any?): Boolean {
contract {
returns(true) implies (other is T)
}
if (this === other) return true
return other!=null && other is T
}

这应该是可能的,不是吗?
https://youtrack.jetbrains.com/issue/KT-35366?project=kt

结果发现它与另一个已经存在一年的请求重复: https://youtrack.jetbrains.com/issue/KT-28298 (可以投赞成票;))

关于kotlin - Kotlin 合约能否/会表达已删除的类型含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59245615/

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