加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

EveryWithIndex groovy声明

发布时间:2020-12-14 16:37:45 所属栏目:大数据 来源:网络整理
导读:我是新来的,我一直在面对一些问题,了解每个{}和eachwithindex {}语句。 每个和每个WInIndex实际上是方法吗?如果是这样,他们有什么论据呢? 在groovy文档中有一些这样的例子: def numbers = [ 5,7,9,12 ]numbers.eachWithIndex{ num,idx - println "$idx
我是新来的,我一直在面对一些问题,了解每个{}和eachwithindex {}语句。

每个和每个WInIndex实际上是方法吗?如果是这样,他们有什么论据呢?

在groovy文档中有一些这样的例子:

def numbers = [ 5,7,9,12 ]
numbers.eachWithIndex{ num,idx -> println "$idx: $num" } //prints each index and number

那我知道这个数字是一个数组。上述语句中的num和idx是什么?什么是 – >运算符做?

我知道$ idx和$ num打印值,但是idx和num如何自动与数组的索引和内容相关联?这背后的逻辑是什么?请帮忙。

解决方法

这些是简单的方法,但它们遵循一个特定的模式 – 他们将Closure作为最后一个参数。关闭是一种功能,您可以在适用时传递和呼叫。

例如,eachWithIndex可能看起来像这样(大致):

void eachWithIndex(Closure operation) {
    for (int i = 0; this.hasNext(); i++) {
        operation(this.next(),i); // Here closure passed as parameter is being called
    }
}

这种方法允许构建通用算法(如在项目上迭代),并通过传递不同的闭包来在运行时改变具体的处理逻辑。

关于参数部分,如上例所示,我们使用两个参数(当前元素和当前索引)来调用闭包(operation)。这意味着eachWithIndex方法期望不仅接收任何封闭,而且接收这两个参数。从语法前景来定义闭包定义中的参数,如下所示:

{ elem,index ->
    // logic 
}

所以 – >用于将闭包定义的一部分与其逻辑分开。当一个闭包只有一个参数时,它的参数定义可以省略,然后该参数可以在闭包的范围内被访问,其名称为(第一个参数的隐含名称)。例如:

[1,2,3].each {
    println it
}

它可以这样重写:

[1,3].each({ elem ->
    println elem
})

当您看到Groovy语言添加了一些语法糖,使这样的结构看起来更漂亮。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读