我想知道为什么Groovy编译器无法正确解析以下调用
a = { p -> p }
b = { p -> p }
a b 1
我希望将其正确解释为
a(b(1))
或者是否有任何可以解释的语法?
有趣的是,这会产生正确的结果
a b { 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