具有默认值的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]
您还可以事先检查传入的密钥,确保它们在 默认情况下,至少在运行时通知使用者 正在发送未知密钥