11

是否可以将映射扩展为方法参数列表

在 Python 中是可能的,例如。 将元组扩展为参数

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

我想像这样写smtm(*map)

4

3 回答 3

10

扩展运算符(*) 用于将列表拆分为单个元素。这可用于调用具有多个参数的方法,然后将列表传播到参数的值中。

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

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

地图:

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

重要的一点是您按位置传递参数。

于 2012-11-19T10:45:01.620 回答
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 的函数/构造函数,并这样做

于 2012-11-19T09:36:12.150 回答
-3
   mmap = { 'a':1, 'b':2 }

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

30

3

于 2012-11-19T09:16:52.650 回答