我有一个变量,其中包含我想要检索值的另一个变量的名称,例如:
def variable = "finalVariableValue"
def variableName = "variable"
我怎样才能获得variable.value,因为我只知道variableName?
我已经看到了一个Binding可以使用但是我有很多变量需要放在这个Binding对象上才能使它工作。是唯一的方法吗?
注意:这种行为与ant属性扩展机制非常相似。
谢谢, 米歇尔。
答案 0 :(得分:4)
通过在def
前面添加前缀,您不会在可以检查的对象中注册它,就像地图一样;有人可能会说它已在AST注册,但这是一条艰难的道路。
我的0.03正在使用地图,绑定或动态属性。删除def
部分并选择其中一个解决方案:
只需将variable
声明为地图中的关键字:
def map = [:]
map.variable = "finalVariableValue"
def variableName = "variable"
assert map[variableName] == "finalVariableValue"
使用脚本内置绑定。请注意,这仅适用于脚本:
variable = "finalVariableValue"
variableName = "variable"
assert binding[variableName] == "finalVariableValue"
使用一些动态属性机制,例如Expando
(您也可以将getProperty
与setProperty
和其他人一起使用):
class Container extends Expando {
def declare() {
variable = "finalVariableValue"
variableName = "variable"
}
}
c = new Container()
c.declare()
assert c[c.variableName] == "finalVariableValue"
答案 1 :(得分:0)
您可以使用脚本的范围,只需删除Type
定义:
variable = 'value'
name = 'variable'
assert 'variable' == this.name
assert 'value' == this[this.name]
或使用@Field
注释:
import groovy.transform.Field
@Field def variable = 'value'
@Field def name = 'variable'
assert 'variable' == this.name
assert 'value' == this[this.name]