首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPars语法陌生

GPars语法陌生
EN

Stack Overflow用户
提问于 2016-01-11 18:44:33
回答 1查看 242关注 0票数 2

我来自Java背景,同时学习Groovy和Gradle,因为我的目标之一是另一个。-/我也需要GPars的东西,因为速度和并行性是一个问题。无论如何,我看到了这个GPars的例子,我有一些问题,我认为是语言上的细微差别,而不是库问题,我还不明白。

代码语言:javascript
复制
//check whether all elements within a collection meet certain criteria
 GParsPool.withPool(5) { ForkJoinPool pool ->
     assert [1, 2, 3, 4, 5].everyParallel {it > 0}
     assert ![1, 2, 3, 4, 5].everyParallel {it > 1}
 }

我看到ForkJoinPool pool ->..了。为什么这两行不像这样包裹在大括号里。如果范围只是一个可选的遗漏,就像分号一样:

代码语言:javascript
复制
//check whether all elements within a collection meet certain criteria
 GParsPool.withPool(5) { ForkJoinPool pool -> {
     assert [1, 2, 3, 4, 5].everyParallel {it > 0}
     assert ![1, 2, 3, 4, 5].everyParallel {it > 1}
   }
 }

it是什么?是迭代器吗?it是从哪里来的?

据我所知,如果对象从来没有被具有.everyParallel功能的东西显式包装,那么如何才能调用该对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-11 19:28:52

我将从声明开始,我绝不是GPars专家,但是我已经在几种情况下使用过它,所以希望这里有一些有用的东西(欢迎来自社区的更新)。

闭包

Groovy闭包是可以传递的代码块。当一个参数被传递到块中时,它将出现在->表示法之前。例如:

代码语言:javascript
复制
GParsPool.withPool(5) { ForkJoinPool pool ->
  // Here the `pool` object is available to use for processing.
}

在不提供定义变量的情况下,包含一个隐式it对象。上述封闭性可以用以下方式写成:

代码语言:javascript
复制
GParsPool.withPool(5) { Object it ->
  // Generically stating that a single object will be passed in, called "it". In this example it is a `ForkJoinPool` object.
}

GParsPool.withPool(5) {
  // No "it" object is specified, but you can still use "it" because it is implied.
}

everyParallel()

GParsPool类为集合和对象启用了基于并行数组(来自JSR-166y)的并发DSL。来源

如果我正确理解了这一点,那么在使用GParsPool.withPool()时会自动添加功能,这允许您使用像everyParallel()这样的方法。动态编程FTW!我猜它使用Groovy metaClass功能在运行时动态添加方法,这样您就可以调用它们而不必自己添加它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34728763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档