groovy - Groovy 如何解析带有空格的方法调用

标签 groovy

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

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

a b 1

我希望它能被正确地解释为

a(b(1))

或者是否有任何可以以不同方式解释的语法?

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

a b { 1 }

最佳答案

它尝试将其评估为:

a( b ).1

我想象的方式,就好像它是一个符号列表,并且对它们调用 collat​​e( 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/

相关文章:

java - 如何在 Grails 中显示页面生成统计信息

gradle - 在 gradle-5.1.1 中用什么代替 TaskInternalexecute() ?

java - 如何修复 groovy.lang.MissingMethodException : No signature of method

jenkins - 我的 Jenkins 蓝海管道中缺少运行按钮

xml - 使用常规脚本在 SOAPUI 请求中设置参数的正确方法

groovy - Groovy 元类的范围?

sorting - 对 Gradle 任务中属性文件的内容进行排序

web-services - Grails-调用Web服务时未找到类定义错误

jquery - 卡塔隆 : Unable to click on object: Web element with id not found

java - 如何读取控制台输出