具有默认值的Groovy命名位置参数
我有以下代码:具有默认值的Groovy命名位置参数,groovy,jenkins-pipeline,Groovy,Jenkins Pipeline,我有以下代码: 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: f
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
,它具有我需要的默认值。
我不能使用类。
我的选项是什么?这在groovy中是不可能的,最右边的可选参数首先被删除,依此类推 更好的解释:
调用此方法时,实现者需要传入默认的第2个参数。正如前面所回答的,这不起作用-groovy没有命名参数。 人们经常混淆命名参数的一件事是 地图。例如,您可以将默认值与参数和 接近你所追求的目标:
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]
您还可以事先检查传入的密钥,确保它们在
默认情况下,至少在运行时通知使用者
正在发送未知密钥