教程here说:
如果至少有一个参数并且没有歧义,Groovy中的方法调用可以省略括号。
这有效:
static method1(def val1)
{
"Statement.method1 : $val1"
}
def method1retval = method1 30;
println (method1retval); //Statement.method1 : 30
但是当我在方法中添加另一个参数时:
static method1(def val1, def val2)
{
"Statement.method1 : $val1 $val2"
}
def method1retval = method1 30 "20";
println (method1retval);
它给出了错误
Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: static Statements.method1() is applicable for argument types: (java.lang.Integer) values: [30]
Possible solutions: method1(int, java.lang.String)
问。在方法调用中有多个参数时,我省略了括号吗?
问。我们还可以在调用类构造函数时省略括号吗?
答案 0 :(得分:11)
然后呼叫为method1 30, "20"
。文档说你可以省略(和)而不是,
。在您的情况下,代码将被解释为method1(30)."20"
(进行下一次调用)。
对于一般的构造函数,同样的规则适用。但通常它们与new
一起使用,但这不起作用。
class A {
A() { println("X") }
A(x,y) { println([x,y]) }
}
// new A // FAILS
// new A 1,2 FAILS
A.newInstance 1,2 // works
new
周围的错误表示,预计会出现(
并且他们已经在分析时失败了。 new
是一个关键字,具有特殊行为。
实际上,这一切都归结为:避免()
使代码更好(或更短,如果你编码高尔夫)。它的主要用途是“DSL”,您只需将代码转换为可读的句子(例如select "*" from "table" where "x>6"
或grails static constraints { myval nullable: true, min: 42 }
)。