我想在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'
[...]
}
也不起作用。
有什么建议吗?
答案 0 :(得分:1)
这是错误的做法。通常,您可以使用列表,地图或设置数据结构,这些数据结构允许您保存集合并访问集合中的特定元素。
列表允许您保留特定值(唯一或非唯一)。 设置可让您保留特定值(全部唯一)。 地图允许您拥有Key, Value
对(密钥必须唯一)。
在这里阅读更多内容 groovy list, groovy map
答案 1 :(得分:0)
试试这个(如果我理解正确的话):
def dummyFunc(varName) {
new GroovyShell(this.binding).evaluate("${varName}")
}
dummyFunc('abc')
abc = "Hello there"
println abc
打印
Hello there