Groovy - 定义变量名称由另一个变量传递的变量

时间:2016-06-16 09:00:10

标签: variables dynamic groovy

我想在groovy中定义一个变量,变量名称由另一个变量传递。

类似的东西。

def runExtFunc(varName){
    def varName  // => def abc
    varName = load 'someFile.groovy'   // abc = load 'someFile.groovy'

    varName."$varName"() // -> abc.abc() (run function defined in File)
}

    [...]
runExtFunc('abc')  // -> abc.abc() (Function abc defined in File)
    [...]
runExtFunc('xyz')  // -> xyz.xyz() (Function xyz defined in File)
    [...]

遗憾的是,var varName定义变量varName而不是abc。当我两次调用runExtFunc时,会出现错误,因为varName已经定义了。

我也试过

def runExtFunc(varName){
    def "${varName}"  // => def abc
       [...]
    "${varName}" =  load 'someFile.groovy'
       [...]
}

也不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这是错误的做法。通常,您可以使用列表地图设置数据结构,这些数据结构允许您保存集合并访问集合中的特定元素。

列表允许您保留特定值(唯一或非唯一)。 设置可让您保留特定值(全部唯一)。 地图允许您拥有Key, Value对(密钥必须唯一)。

在这里阅读更多内容 groovy listgroovy map

答案 1 :(得分:0)

试试这个(如果我理解正确的话):

def dummyFunc(varName) {
  new GroovyShell(this.binding).evaluate("${varName}")
}

dummyFunc('abc')

abc = "Hello there"
println abc

打印

Hello there