Groovy将元组/ map扩展为参数

时间:2012-11-19 07:42:34

标签: groovy arguments parameter-passing

是否可以将地图展开为方法参数列表

在Python中,它是可能的,例如。 Expanding tuples into arguments

我有def map = ['a':1, 'b':2] 和方法def m(a,b)

我想写像m(*map)

这样的smt

3 个答案:

答案 0 :(得分:10)

spread operator(*)用于将列表拆分为单个元素。这可以用于调用具有多个参数的方法,然后将列表分散到参数的值中。

列表(Groovy中的列表与Python中的元组最近相关 12 ):

list = [1, 2]
m(*list)

地图:

map = [a: 1, b: 2]
paramsList = map.values().toList()
m(*paramsList)

一个重点是你按位置传递参数。

答案 1 :(得分:1)

我目前能想到的最好的是:

@groovy.transform.Canonical
class X {
  def a
  def b

  def fn( a, b ) {
    println "Called with $a $b"
  }
}

def map = [ a:1, b:2 ]

def x = new X( map.values().toList() )

x.fn( map.values().toList() )

但是,在调用函数/构造函数时,它会考虑映射的顺序,而不考虑键的名称。

您可能想要添加一个采用Map的函数/构造函数,并以这种方式执行

答案 2 :(得分:-2)

   mmap = { 'a':1, 'b':2 }

   def m( a, b ):
       return a+b
   print m( **mmap )

30

3