GPars 语法不熟悉
GPars syntax unfamiliar
我来自 Java 背景,我一直在同时学习 Groovy 和 Gradle,因为我的目标是另一个。 :-/ 我也需要 GPars 的东西,因为速度和并行性是一个问题。无论如何,我看到这个 GPars 示例,我有一些我认为是语言细微差别的问题,而不是图书馆问题,我还不明白。
//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 ->..
。为什么两条线不是这样用大括号包裹起来的。如果它只是一个可选的遗漏,就像分号一样,你似乎会失去对范围的跟踪:
//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
?
首先声明一下,我绝不是 GPars 专家,但我已经在一些情况下使用过它,所以希望这里能提供一些有用的东西(欢迎来自社区的更新)。
Groovy 闭包是可以传递的代码块。当参数被传递到块中时,它将在 ->
符号之前出现。例如:
GParsPool.withPool(5) { ForkJoinPool pool ->
// Here the `pool` object is available to use for processing.
}
在您未提供定义变量的情况下,包含一个隐含的 it
对象。上面的闭包可以这样写:
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()
The GParsPool class enables a ParallelArray-based (from JSR-166y)
concurrency DSL for collections and objects. Source
如果我没有理解错的话,在使用 GParsPool.withPool()
时会自动添加一些功能,这样您就可以使用 everyParallel()
等方法。动态规划!我猜它使用 Groovy metaClass
功能在运行时动态添加方法,这样您就可以调用它们而无需自己添加它们。
我来自 Java 背景,我一直在同时学习 Groovy 和 Gradle,因为我的目标是另一个。 :-/ 我也需要 GPars 的东西,因为速度和并行性是一个问题。无论如何,我看到这个 GPars 示例,我有一些我认为是语言细微差别的问题,而不是图书馆问题,我还不明白。
//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 ->..
。为什么两条线不是这样用大括号包裹起来的。如果它只是一个可选的遗漏,就像分号一样,你似乎会失去对范围的跟踪:
//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
?
首先声明一下,我绝不是 GPars 专家,但我已经在一些情况下使用过它,所以希望这里能提供一些有用的东西(欢迎来自社区的更新)。
Groovy 闭包是可以传递的代码块。当参数被传递到块中时,它将在 ->
符号之前出现。例如:
GParsPool.withPool(5) { ForkJoinPool pool ->
// Here the `pool` object is available to use for processing.
}
在您未提供定义变量的情况下,包含一个隐含的 it
对象。上面的闭包可以这样写:
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()
The GParsPool class enables a ParallelArray-based (from JSR-166y) concurrency DSL for collections and objects. Source
如果我没有理解错的话,在使用 GParsPool.withPool()
时会自动添加一些功能,这样您就可以使用 everyParallel()
等方法。动态规划!我猜它使用 Groovy metaClass
功能在运行时动态添加方法,这样您就可以调用它们而无需自己添加它们。