Есть ли способ ссылаться на переменные динамически, как методы? Here является Groovy пример ссылки метод динамически:Получить динамически динамически
class Dog {
def bark() { println "woof!" }
def sit() { println "(sitting)" }
def jump() { println "boing!" }
}
def doAction(animal, action) {
animal."$action"() //action name is passed at invocation
}
def rex = new Dog()
doAction(rex, "bark") //prints 'woof!'
doAction(rex, "jump") //prints 'boing!'
... Но делать что-то вроде этого не работает:
class Cat {
def cat__PurrSound__List = ['a', 'b', 'c']
def cat__MeowSound__List = [1, 2, 3]
def someMethod(def sound) {
assert sound == "PurrSound"
def catSoundListStr = "cat__${obj.domainClass.name}__List"
assert catSoundListStr = "cat__PurrSound__List"
def catSoundList = "$catSoundListStr"
assert catSoundList == cat__PurrSound__List // fail
}
}
'assert foo. '$ SomeMethod"() == "asdf" 'не будет работать, так как у вас нет переменной var, называемой' someMethod' –
@tim_yates Кажется, что я отлично работаю в своем тесте Grails. Я использовал его как пример [здесь] (http://groovy.codehaus.org/Dynamic+Groovy), который использует '$ action'. – ubiquibacon
Что заставляет использовать '' $ foo'' вместо 'foo'? – dmahapatro