Groovy:使用eachWithIndex 方法观察到的不同行为

标签 groovy

我在那里做一个 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.keyit.value 返回您期望的内容。

当您使用 eachWithIndex 的两个参数版本时,it 是 Map 中的当前条目,i 是当前条目指数。您正在打印 i(索引),然后由于您只打印 it,因此您将获得 it.toString() 的结果,它将 map 条目格式化为 "${it.key}=${it.value}"

关于Groovy:使用eachWithIndex 方法观察到的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503259/

相关文章:

groovy - 任务方法的gradle参数顺序

jenkins - 使用 def 和不使用定义变量有什么区别?

testing - SOAP UI - 在测试套件中所有测试用例的所有测试步骤请求中设置节点值

groovy - Spock - 模拟外部服务

grails - Grails中的Quartz Scheduler

azure - Azure 中的 Kubeconfig

jenkins - 如何在 jenkinsfile 内使用凭证类型 "SSH Username with private key"进行管道作业

tomcat - 在 Tomcat6 上运行的 Grails 应用程序 - 上下文初始化失败

java - 如何在 java 或 groovy 中获取两个日期之间的确切日期差异?

jenkinsfile 使用特征和其他常规语法