Kotlin:是否不再可能迭代具有解构 Entry 的映射?漏洞?

Kotlin: Is it no longer possible to iterate a map with destructured Entry? Bug?

似乎在最新的 Kotlin 更新中,您无法再使用解构 Entry 遍历地图。例如:

val map = HashMap<Int, String>()

for ((i, s) in map) { // compiler error here
    ... // code
}

编译错误为For-loop range must have an iterator() method

此功能之前按预期工作,遍历地图中的每个条目。我还尝试使用 map.entriesmap.entrySet()(已弃用)以及这些:

现在迭代地图的惯用方法是什么?这是一个错误吗?

看起来像是 IDE 和 Gradle 插件中的错误。我尝试了以下方法:

  • 使用 Kotlin 4584 创建了一个干净的 Gradle 项目并粘贴了您的代码。错误是存在的,与您的出现相同。
  • 将 Kotlin 版本更改为之前的版本 4583,并重新导入项目。代码编译的很好。
  • 将Kotlin版本改回4584,bug没有出现,代码编译成功。

以下更改无法让我重现此项目中的错误,但我可以在新项目中重现。

奇怪的是,IntelliJ 向我提供了 "update" Kotlin 插件 2428,这导致了这个问题。

下载 JetBrain 的插件存储库(此处为 Kotlin 插件:http://plugins.jetbrains.com/plugin/6954?pr=idea)并在 IntelliJ 中选择 Install from disk... 解决了问题。