Compiler errors 为什么==在Kotlin中的不同类型上创建编译错误

Compiler errors 为什么==在Kotlin中的不同类型上创建编译错误,compiler-errors,kotlin,Compiler Errors,Kotlin,无法编译以下代码: if ("2" == 3) { //do something } 错误:Kotlin:运算符“==”不能应用于“String”和“Int” 然而,Kotlin文档称这是结构平等,并被翻译成a?.equals(b)?:(b==null): 这到底是怎么回事?它是如何工作的?这是一个Kotlin bug,在youtrack中报告,优先级是Major,因此我认为它会很快得到修复。例如: val ok = "2".equals(3) // works fine val erro

无法编译以下代码:

if ("2" == 3) {
  //do something
}
错误:Kotlin:运算符“==”不能应用于“String”和“Int”

然而,Kotlin文档称这是结构平等,并被翻译成
a?.equals(b)?:(b==null)


这到底是怎么回事?它是如何工作的?

这是一个Kotlin bug,在youtrack中报告,优先级是
Major
,因此我认为它会很快得到修复。例如:

val ok = "2".equals(3) // works fine
val error = "2" == 3 // compilation error

我认为这个bug是在谈论一个相关的警告,而不是错误本身,它看起来是故意的。@oshai没有。记者将它描述为一个编译错误,报告称为:“平等不适用”。而记者希望这样的错误变成警告。也许你是对的。但是,这个bug是在2013年10月12日创建的,所以我怀疑JB不打算改变它的行为。我认为这是有意的。它们的类型是不同的,并且您知道它们在编译时间上必须不相等(两者都已不为null)。如果你在跑步前就知道它们是不同的,为什么还要比较它们呢?这总是错误的。它只会增加缺少附加方法(如
.toString()
)的可能性。目前,我们没有计划更改==在类型方面的行为。