首页 > 解决方案 > 如何使用闭包的默认值来命名参数

问题描述

所以基本上我想做这样的事情:

execute = { String param1, String param2 = 'default' ->
    echo "${param1}"
    echo "${param2}"
}

execute(
    param1: 'Test1',
    param2: '123'
)
execute('Test2')

但这不起作用,因为它将所有给定的参数放在param1. 可以使用地图,但我想保留默认参数的功能。

有没有办法做到这一点?

标签: groovy

解决方案


Groovy 没有命名参数。你只能允许一张地图并让它看起来像它。所以你必须允许地图并自己处理后备。例如,将传入的地图与一些默认地图合并,或者在需要它们的地方选择默认值。例如

def c = { Map args=[:] ->
    def param1 = args.param1 ?: 'fallback'
    println param1
}

c()
// ⇒ fallback
c(param1: "set")
// ⇒ set

推荐阅读