首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy可选括号和点

问Groovy可选括号和点
EN

Stack Overflow用户
提问于 2016-01-10 21:37:16
回答 1查看 2K关注 0票数 7

我正在学习Groovy,它允许构建一个智能DSL,这给我留下了深刻的印象,但对于括号和点何时是可选的规则,我感到有点困惑。考虑以下代码:

代码语言:javascript
复制
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就是胡说八道。

我看到的每一个例子都在一条线上显示了这种表达方式,但是很明显

代码语言:javascript
复制
s = take 3 plus 4

我的问题是,为什么

代码语言:javascript
复制
println( take 3 plus 4 )

不工作?显然,groovy将解析这类表达式,即使它们本身不在一行上(如赋值工作所示)。我会认为,添加这些括号将消除歧义的形式,这一行不工作,并将打印出7,如我所希望的。

相反,groovy提供了一个错误“意外令牌:3”。据我所知,groovy将不允许在println中使用可选括号或点,尽管它似乎并不含糊。这种把戏什么时候起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-11 20:16:49

这属于嵌套方法调用的范畴,在这种情况下,不能省略括号。这会导致歧义,结果是意外的,因为println方法认为您要传递它的多个参数。您可以通过在println方法中使用groovy字符串来减少歧义。

代码语言:javascript
复制
println "${take 3 plus 4}"

更多信息:省略部分

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34711081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档