groovy中的splat操作符?

groovy中的splat操作符?,groovy,dsl,Groovy,Dsl,将打印 def foo(map, name) { println(map) } foo("bar", hi: "bye") 现在我有一张我希望传递给foo的前一张地图。在伪代码中,类似于: [hi:bye] 这样它就能打印出来了 def otherMap = [hi: "world"] foo("bar", hi: "bye", otherMap*) 这当然不行 此外,尝试仅传递映射会混淆参数的顺序: [hi:world] 将打印 def otherMap = [hi: "worl

将打印

def foo(map, name) {
  println(map)
}

foo("bar", hi: "bye")
现在我有一张我希望传递给foo的前一张地图。在伪代码中,类似于:

[hi:bye]
这样它就能打印出来了

def otherMap = [hi: "world"]
foo("bar", hi: "bye", otherMap*)
这当然不行

此外,尝试仅传递映射会混淆参数的顺序:

[hi:world]
将打印

def otherMap = [hi: "world"]
foo("bar", otherMap)

我如何解决这个问题?

我不确定您到底想要实现什么,所以这里有几种可能性:

如果要将第二个映射中的内容添加到第一个映射中,则操作员的方法如下:

bar
如果要打印全部或仅打印最后一个参数,请使用varargs:

def foo(Map args) {
  println args.map
}

def otherMap = [hi: "world"]
foo(name:"bar", first:[hi: "bye"], map:otherMap)

您正在寻找扩展映射操作符

def printLast(Object[] args) {
  println args[-1]
}

def printAll(Object[] args) {
  args.each { println it }
}

def printAllButName(name, Map[] maps) {
  maps.each { println it }
}

def otherMap = [hi: "world"]
printLast("bar", [hi: "bye"], otherMap)
printAll("bar", [hi: "bye"], otherMap)
printAllButName("bar", [hi: "bye"], otherMap)
印刷品:

def foo(map, name) {
  println(map)
}

foo("bar", hi: "bye")

def otherMap = [hi: "world"]
foo("bar", hi: "bye", *:otherMap)
foo("bar", *:otherMap, hi: "bye")

您如何期望
foo(“bar”,otherMap)
打印的不是
bar
?您正在打印第一个参数。@Geo是的,我也在想同样的问题(但我是Groovy新手,所以不知道)。特别是我在这篇文章中感到困惑:foo(“bar”,hi:“bye”)如何打印[hi:“bye”]而不是“bar”(但如果你改为foo(“bar”,“hi:“bye”]),它会按预期工作。谁能开导一下吗?
def foo(map, name) {
  println(map)
}

foo("bar", hi: "bye")

def otherMap = [hi: "world"]
foo("bar", hi: "bye", *:otherMap)
foo("bar", *:otherMap, hi: "bye")
["hi":"bye"]
["hi":"world"]
["hi":"bye"]