我有此代码:
def myFunc(arg1, arg2="default arg2", arg3="default arg3") {
println("arg1: ${arg1}")
println("arg2: ${arg2}")
println("arg3: ${arg3}")
}
myFunc(1, arg3="foo")
我想要的输出:
arg1: 1
arg2: default arg2
arg3: foo
实际输出:
arg1: 1
arg2: foo
arg3: default arg3
我想覆盖最后一个参数而不更改中间的arg2
,该中间值具有我需要的默认值。
我不能使用课程。
我有什么选择?
答案 0 :(得分:1)
这在常规情况下是不可能的,最右边的可选参数首先被删除,依此类推。
更好的解释: https://mrhaki.blogspot.com/2009/09/groovy-goodness-parameters-with-default.html
实现者在调用此方法时需要传递默认的第二个参数。
答案 1 :(得分:0)
正如已经回答的那样,这不起作用-groovy没有命名参数。 人们经常混淆命名参数的一件事是 地图。例如。您可以将默认值与参数合并, close 转到您想要的状态:
def myFunc(Map kwargs = [:]) {
def args = [arg1: "a1", arg2: "a2", arg3: "a3"].tap{putAll(kwargs)}
println([args.arg1, args.arg2, args.arg3])
}
myFunc(arg3: "new a3")
// => [a1, a2, new a3]
您也可以事先检查输入密钥是否在 至少在运行时通知使用者的默认值 发送未知密钥。