如何拥有一个带有默认参数的方法,并且可以在 Groovy 中按名称覆盖该方法?

cde*_*zaq 2 methods groovy named-parameters default-parameters

groovy 中的构造函数允许使用命名参数,方法参数允许使用默认值,但我似乎无法获得具有默认参数值的方法与命名参数一起使用。

理想情况下,我想要这样的东西:

def myMethod(def greeting = "Hello", def person = "World", def inflection = "!") {
    "${greeting} ${person}${inflection}"
}

assert myMethod() == "Hello World!"
assert myMethod(greeting: "Hi") == "Hi World!"
assert myMethod(inflection: "?", person: "bob") == "Hello Bob?"
assert myMethod("Sup") == "Sup World!"
assert myMethod("Word", "Dawg") == "Word Dawg!"
Run Code Online (Sandbox Code Playgroud)

这是我能得到的最接近的结果,但它非常丑陋,感觉不是很“常规”,并且在所有情况下都不能完全工作:

def myMethod(Map vars = [:]){

    vars.greeting = vars.greeting ?: "Hello"
    vars.person = vars.person ?: "World"
    vars.inflection = vars.inflection ?: "!"

    "${vars.greeting} ${vars.person}${vars.inflection}"
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ser 5

Groovy 没有真正的命名参数,并且它不会比您最后的代码片段更好。