Groovy如何使用空格解析方法调用
我想知道为什么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
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
我通过阅读蒂姆的回复比阅读大多数书籍学到更多!我通过阅读蒂姆的回应比阅读大多数书籍学到更多!