Groovy: 解包方法中的命名映射参数
Groovy: unwrapping named map arguments in method
我发现自己将很多变量作为命名参数传递给我的方法,因为它让事情变得更清晰:
doFunction(name: 'Jack', age: 27)
现在在 doFunction 中我经常发现自己这样做:
doFunction(Map args) {
if (args['name']) {
def name = args['name']
// do stuff with name
}
}
是否有语言功能可以将 Map 动态解包为其各自的参数?我找不到类似的东西。如果没有,我很好奇为什么,这似乎是样板文件的自然 Groovy 方法。
我想要一种方法来立即检查并处理参数(如果存在),是否有更简洁的方法来执行此操作?我是否完全以错误的方式接近 Map 参数?
因为没有解构,例如在 clojure 中,一种处理此类映射的方法是使用 with
。喜欢:
void destruct(Map params) {
params.with{
if (name) {
println "Hello $name"
}
if (age) {
println "I am $age years old"
}
}
}
destruct name: "World", age: 4.54e9
// => Hello World
// => I am 4.54E+9 years old
destruct name: "Computer"
// => Hello Computer
同样在吹毛求疵方面:那些是 没有 命名参数(例如在 python 中)。它只是传递映射的语法糖。例如。它是 destruct([name: 'World'])
的缩写——它将 不适用于 方法 void destruct(String name, BigDecimal age)
我发现自己将很多变量作为命名参数传递给我的方法,因为它让事情变得更清晰:
doFunction(name: 'Jack', age: 27)
现在在 doFunction 中我经常发现自己这样做:
doFunction(Map args) {
if (args['name']) {
def name = args['name']
// do stuff with name
}
}
是否有语言功能可以将 Map 动态解包为其各自的参数?我找不到类似的东西。如果没有,我很好奇为什么,这似乎是样板文件的自然 Groovy 方法。 我想要一种方法来立即检查并处理参数(如果存在),是否有更简洁的方法来执行此操作?我是否完全以错误的方式接近 Map 参数?
因为没有解构,例如在 clojure 中,一种处理此类映射的方法是使用 with
。喜欢:
void destruct(Map params) {
params.with{
if (name) {
println "Hello $name"
}
if (age) {
println "I am $age years old"
}
}
}
destruct name: "World", age: 4.54e9
// => Hello World
// => I am 4.54E+9 years old
destruct name: "Computer"
// => Hello Computer
同样在吹毛求疵方面:那些是 没有 命名参数(例如在 python 中)。它只是传递映射的语法糖。例如。它是 destruct([name: 'World'])
的缩写——它将 不适用于 方法 void destruct(String name, BigDecimal age)