Groovy命名的位置参数具有默认值

时间:2019-09-08 16:33:11

标签: 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: foo
arg3: default arg3

我想覆盖最后一个参数而不更改中间的arg2,该中间值具有我需要的默认值。 我不能使用课程。 我有什么选择?

2 个答案:

答案 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]

您也可以事先检查输入密钥是否在 至少在运行时通知使用者的默认值 发送未知密钥。