Groovy 中可以把方法或构造器的形参设为可选的。实际上,我们想设置多少就可以设置多少,但这些形参必须位于形参列表的末尾。利用这一特性,可以在演进式设计中向已有的方法添加新的形参。
要定义形参,只需要在形参列表中给它赋一个值。举个栗子:
def log(x, base = 10){
Math.log(x) / Math.log(base)
}
println log(1024)
println log(1024, 10)
println log(1024, 2)
打印结果:
3.0102999566398116
3.0102999566398116
10.0
- 如输出打印所示,在缺少实参是,Groovy 使用了形参的默认值。当然了,可选的形参可以不止一个,举例如下:
def printValue(a, b = 1, c = 2, d = 3, e = 4, f = 5) {
println "a = " + a + ", b = " + b + ", c = " + c + ", d = " + d + ", e = " + e + ", f = " + f
}
printValue(10)
printValue(10, 11, 12, 13)
printValue(10, 11, 12, 13)
printValue(10, 11, 12, 13, 14, 15)
打印结果:
a = 10, b = 1, c = 2, d = 3, e = 4, f = 5
a = 10, b = 11, c = 12, d = 13, e = 4, f = 5
a = 10, b = 11, c = 12, d = 13, e = 4, f = 5
a = 10, b = 11, c = 12, d = 13, e = 14, f = 15
- Groovy 还会把末尾的数组形参视作可选的。这样的话,可以为最后一个形参提供零个或多个值,举个栗子:
def task(name, String[] details){
println "$name -- $details"
}
task('Call', '123-456-789')
task('Call', '123-456-789', '789-456-123')
task('Check Mail')
打印结果:
Call -- [123-456-789]
Call -- [123-456-789, 789-456-123]
Check Mail -- []