Groovy如何使用空格解析方法调用

时间:2014-03-12 16:16:49

标签: groovy

我想知道为什么Groovy编译器无法正确解析以下调用

a = { p -> p }
b = { p -> p }

a b 1

我希望将其正确解释为

a(b(1))

或者是否有任何可以解释的语法?

有趣的是,这会产生正确的结果

a b { 1 }

1 个答案:

答案 0 :(得分:4)

它试图将其评估为:

a( b ).1

我想象的方式就好像它是一个符号列表,而collate( 2 )被称为它们......

def list = [ 'a', 'b', 'c', 'd', 'e' ]
def pairs = list.collate( 2 )

此列表中包含2个值的所有条目都是方法/参数对,并且末尾留下的任何单个元素都是属性访问调用

因此a b c d e将被评估为:a( b ).c( d ).e

你的第二个例子是一个有趣的边缘案例。我猜测因为最后的闭包,对b( Closure )的调用优先,所以先执行,然后调用结果a

所以给出:

a = { p -> p + 10 }
b = { c -> c() * 5 }

a b { 1 }

结果为15