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

Groovy如何使用空格解析方法调用,groovy,Groovy,我想知道为什么Groovy编译器不能正确地解析以下调用 a = { p -> p } b = { p -> p } a b 1 我希望这被正确地解释为 a(b(1)) 或者是否有任何语法可以进行不同的解释 有趣的是,这会产生正确的结果 a b { 1 } 它试图将其评估为: a( b ).1 我想象它的方式,就好像它是一个符号列表,并且对它们调用了collate(2) def list = [ 'a', 'b', 'c', 'd', 'e' ] def pairs = li

我想知道为什么Groovy编译器不能正确地解析以下调用

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

a b 1
我希望这被正确地解释为

a(b(1))
或者是否有任何语法可以进行不同的解释

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

a b { 1 }

它试图将其评估为:

a( b ).1
我想象它的方式,就好像它是一个符号列表,并且对它们调用了
collate(2)

def list = [ 'a', 'b', 'c', 'd', 'e' ]
def pairs = list.collate( 2 )
此列表中具有2个值的所有条目都是一个方法/参数对,最后剩下的任何单个元素都是属性访问调用

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

您的第二个示例是一个有趣的edge案例。我猜由于最后的闭包,对
b(闭包)
的调用优先,因此首先执行,然后对结果调用
a

因此:

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

a b { 1 }

结果是
15

它尝试将其评估为:

a( b ).1
我想象它的方式,就好像它是一个符号列表,并且对它们调用了
collate(2)

def list = [ 'a', 'b', 'c', 'd', 'e' ]
def pairs = list.collate( 2 )
此列表中具有2个值的所有条目都是一个方法/参数对,最后剩下的任何单个元素都是属性访问调用

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

您的第二个示例是一个有趣的edge案例。我猜由于最后的闭包,对
b(闭包)
的调用优先,因此首先执行,然后对结果调用
a

因此:

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

a b { 1 }

结果是
15

我通过阅读蒂姆的回复比阅读大多数书籍学到更多!我通过阅读蒂姆的回应比阅读大多数书籍学到更多!