如何在 Groovy 中跳过具有默认值的参数?

Abu*_*iam 5 groovy

我的 Groovy 方法有 3 个参数,最后 2 个有默认值。我想跳过第二个参数,只提供第一个和第三个参数的值,如下所示。

 def askForADate(girlsName, msg = 'Will you go out with me?', beg = 'pretty please!!') {
    println "$girlsName, $msg $beg!"
 }

askForADate('Jennifer',,'Because I love you!')
Run Code Online (Sandbox Code Playgroud)

现在打印出来...

 Jennifer, Because I love you! pretty please!!!
Run Code Online (Sandbox Code Playgroud)

所以看起来它正在将我为第三个参数传递的值插入到第二个参数中。

如何解决这个问题?

Boa*_*oaz 3

正如 doelleri 所说,您需要编写该方法的两个版本。除非您将一些绝妙的优点与命名参数一起使用!

def askForADate(Map op, girlsName) {
    println "$girlsName, ${op.get('msg', 'Will you go out with me?')} ${op.get('beg', 'pretty please!!')}!"
}

askForADate(beg: 'Because I love you!', 'Jennifer')
Run Code Online (Sandbox Code Playgroud)

打印出:Jennifer,你愿意和我出去吗?因为我爱你!!

有关更多详细信息,请参阅http://mrhaki.blogspot.com/2015/09/groovy-goodness-turn-method-parameters.html

该解决方案的明显缺点是重新排序参数,因为现在女孩的名字排在最后。