我可以在Groovy中跳过多少个括号?

时间:2013-11-20 06:25:07

标签: groovy

我是Groovy的新手,在阅读 Groovy in Action 这本书时,我了解到我可以跳过我们在Java中用来括起参数的括号。精细。为了测试这一点我写了一个简单的Groovy脚本(程序不是正确的词,是吗?)

这是:

import java.text.*
DateFormat fmt = DateFormat.getDateTimeInstance()
println fmt.format(new Date())  

这完美无缺。但是,当我删除new Date()周围的括号时,出现错误:

Exception thrown

groovy.lang.MissingPropertyException: No such property: format for class: java.text.SimpleDateFormat 
    at ConsoleScript8.run(ConsoleScript8:3)  

出了什么问题?为什么我不能跳过这些括号?

1 个答案:

答案 0 :(得分:3)

因为Groovy在this对象上考虑第一个调用作为方法时解析代码缺少括号。所以当你写:

println fmt.format new Date()

Groovy解析为:

println(fmt.format).new Date()

这将显示一条错误消息,指出您缺少类format的{​​{1}}属性。

举个例子:

java.text.SimpleDateFormat

结果将是:

e = new Expando()
e.format = {
  "format called"
}

def foo = {
  println it
  it()
}

foo e.format new Date()

Groovy将其理解为:

MissingPropertyException: No such property: Wed Nov 20 10:05:32 2013 for class: java.lang.String

所以它试图从print( e.format ).new Date() 函数的结果中获取属性new Date()


对于简单的日期格式设置,您只需使用print()方法:

Date.format

至于Groovy规则,请考虑this example

println new Date().format("yyyy-MM-dd") 

Groovy理解的是:

drink tea with sugar and milk

非常适合DSL; - )。