我在那里做一个 Groovy 教程,在玩完代码后,我观察到了一些我无法理解的行为。
首先我创建了一个像这样的 Map 对象:
def devMap = [:]
devMap = ['name':'Frankie', 'framework':'Grails', 'language':'Groovy']
devMap.put('lastName','Hollywood')
然后我调用 eachWithIndex
打印出值,如下所示:
devMap.eachWithIndex { println "$it.key: $it.value"}
将其打印到控制台:
name: Frankie
framework: Grails
language: Groovy
lastName: Hollywood
但是当我使用箭头运算符从 eachWithIndex
方法打印到控制台时:
devMap.eachWithIndex { it, i -> println "$i: $it" }
以下内容打印到控制台:
0: name=Frankie
1: framework=Grails
2: language=Groovy
3: lastName=Hollywood
所以我不明白的是为什么索引是用第二条语句打印的以及为什么键值对之间有 =
符号但没有 :
符号?
谢谢。
最佳答案
当您使用 eachWithIndex
的无参数版本时,it
是 Map 中的当前条目。这意味着 it.key
和 it.value
返回您期望的内容。
当您使用 eachWithIndex
的两个参数版本时,it
是 Map 中的当前条目,i
是当前条目指数。您正在打印 i
(索引),然后由于您只打印 it
,因此您将获得 it.toString()
的结果,它将 map 条目格式化为 "${it.key}=${it.value}"
关于Groovy:使用eachWithIndex 方法观察到的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503259/