我是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)
出了什么问题?为什么我不能跳过这些括号?
答案 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; - )。