我正在学习Groovy,它允许构建一个智能DSL,这给我留下了深刻的印象,但对于括号和点何时是可选的规则,我感到有点困惑。考虑以下代码:
Integer take(Integer x) {x}
take 3 plus 4这与预期一样工作,并产生7的输出(当在控制台中运行时),因为groovy将最后一行理解为take(3).plus(4)。
现在,println take 3 plus 4并不像groovy所理解的那样工作,因为println(take).3(plus).4就是胡说八道。
我看到的每一个例子都在一条线上显示了这种表达方式,但是很明显
s = take 3 plus 4我的问题是,为什么
println( take 3 plus 4 )不工作?显然,groovy将解析这类表达式,即使它们本身不在一行上(如赋值工作所示)。我会认为,添加这些括号将消除歧义的形式,这一行不工作,并将打印出7,如我所希望的。
相反,groovy提供了一个错误“意外令牌:3”。据我所知,groovy将不允许在println中使用可选括号或点,尽管它似乎并不含糊。这种把戏什么时候起作用?
发布于 2016-01-11 20:16:49
这属于嵌套方法调用的范畴,在这种情况下,不能省略括号。这会导致歧义,结果是意外的,因为println方法认为您要传递它的多个参数。您可以通过在println方法中使用groovy字符串来减少歧义。
println "${take 3 plus 4}"更多信息:省略部分
https://stackoverflow.com/questions/34711081
复制相似问题