我发现自己将很多变量作为命名参数传递给我的方法,因为它使事情变得更加清晰:
doFunction(name: 'Jack', age: 27)
Run Code Online (Sandbox Code Playgroud)
现在在 doFunction 中,我经常发现自己这样做:
doFunction(Map args) {
if (args['name']) {
def name = args['name']
// do stuff with name
}
}
Run Code Online (Sandbox Code Playgroud)
是否有语言功能可以动态地将 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
Run Code Online (Sandbox Code Playgroud)
同样在挑剔方面:那些没有命名参数(例如在python中)。它只是传递映射的语法糖。例如它的缩写destruct([name: 'World'])——它不适用于一种方法void destruct(String name, BigDecimal age)
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |