Groovy 方法调用语法
Groovy method call syntax
教程 here 说:
Method calls in Groovy can omit the parenthesis if there is at least one parameter and there is no ambiguity.
这个有效:
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)
Q. 那么方法调用中有多个参数时,不能省略括号吗?
Q. 还有调用class构造函数时可以省略括号吗?
那么电话是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 }
)。
教程 here 说:
Method calls in Groovy can omit the parenthesis if there is at least one parameter and there is no ambiguity.
这个有效:
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)
Q. 那么方法调用中有多个参数时,不能省略括号吗?
Q. 还有调用class构造函数时可以省略括号吗?
那么电话是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 }
)。