Dictionary Kotlin:是否不再可能使用解构条目迭代映射?缺陷

Dictionary Kotlin:是否不再可能使用解构条目迭代映射?缺陷,dictionary,for-loop,iteration,kotlin,Dictionary,For Loop,Iteration,Kotlin,使用最新的Kotlin更新,您似乎无法再使用解构的条目迭代地图。例如: val map = HashMap<Int, String>() for ((i, s) in map) { // compiler error here ... // code } val-map=HashMap() 对于映射中的((i,s){//编译器错误 …//代码 } 编译器错误为“循环范围必须具有迭代器()方法” 此功能以前按预期工作,遍历映射中的每个条目。我还尝试使用map.entri

使用最新的Kotlin更新,您似乎无法再使用解构的
条目
迭代地图。例如:

val map = HashMap<Int, String>()

for ((i, s) in map) { // compiler error here
    ... // code
}
val-map=HashMap()
对于映射中的((i,s){//编译器错误
…//代码
}

编译器错误为“循环范围必须具有迭代器()方法”

此功能以前按预期工作,遍历映射中的每个条目。我还尝试使用
map.entries
map.entrySet()
(已弃用)以及以下内容:


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

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

  • 用Kotlin 4584创建了一个干净的Gradle项目,并粘贴了代码。那只虫子就在那里,和你的遭遇一样
  • 将Kotlin版本更改为以前的版本4583,并重新导入项目。代码编译得很好
  • 将Kotlin的版本更改回4584,但错误没有显示出来,代码编译成功

下面的任何更改都不能让我在这个项目中重现这个bug,但我可以在一个新的项目中重现。

奇怪的是,IntelliJ让我“更新”Kotlin plugin 2428,这就是造成这个问题的原因


下载JetBrain的插件库(Kotlin plugin here:)并在IntelliJ中选择
从磁盘安装…
解决了这个问题。

这很有趣!我通过从JetBrain的插件库()下载插件,然后从磁盘安装插件来修复它。@Jire,这看起来更奇怪,因为在我创建了两个项目之后,我无法复制相同的插件,我可以…@Jire,我可以再次复制它:我只需要接受IDE对Gradle文件的建议。但是,该错误在任何项目重新导入时都会消失,因此它似乎是一个小错误。您的问题缺少帮助回答问题所需的信息。例如,您使用的Kotlin的哪个版本有效,而哪个版本无效?另外,如果你认为这是一个bug,那么你应该向Kotlin问题跟踪者报告,我认为这个问题现在可能是无效的,它是由使用Kotlin的一个非常旧的插件引起的,所以这个问题是基于不知道你使用的是Kotlin的旧版本。作者能否在问题的顶部添加一条注释,说明当前Kotlin没有问题,并且问题已经结束?问题是“如果我在《意外》中使用了非常旧的Kotlin版本,为什么当前的功能不起作用?”