这个Groovy语法叫什么(Gradle'排除'闭包语法,例如)?

时间:2017-09-08 23:04:55

标签: gradle groovy

我觉得我已经在某个地方看到了这个术语,但我还没有能够在网上找到它。 Groovy语法的名称是什么,例如,可以在Gradle dependencies闭包中的compile ('org.springframework.boot:spring-boot-starter-web') { exclude group: 'org.slf4j', module: 'slf4j-api' } 方法之后附加闭包?它是如何工作的?我该如何编写使用这种语法的函数?

$array = [
    'k1' => 'Foo',
    'k2' => 'Bar',
    'k3' => 'Baz',
    'k4' => 'quux',
    'k5' => 'quuuux'
];

$keysToKeep         = ['k1', 'k2', 'k3'];
$keysToTranslate    = ['k1' => 'Hello1'];
$keysToLower        = ['k2', 'k3'];

$result = collect($array)
    ->only($keysToKeep)
    ->merge($keysToTranslate)
    ->pipe(function ($array) use ($keysToLower) {
        return $array->merge(
            $array->only($keysToLower)->map(function ($value) {
                return strtolower($value);
            })
        );
    })
    ->toArray();

谢谢!

1 个答案:

答案 0 :(得分:1)

Groovy具有灵活的语法,可以将闭包作为最后一个参数传递给方法。考虑:

def myCompile (a, b, c) {
    println c(a,b)
}

myCompile(10, 20, { x, y -> x + y })

myCompile(10, 20) { x, y ->
    x + y
}

我不认为这有一个名称,但更一般地说,Gradle build.gradle语法形成一个流动和自然的DSL(域特定语言)。 DSL就像这样的语法糖的动机(以及许多其他例子......这是一个很大的话题)。