我想知道为什么 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 个值的所有条目都是方法/参数对,末尾留下的任何单个元素都是属性访问调用
因此,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
关于groovy - Groovy 如何解析带有空格的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357584/