Проходная переменная для оценки в Groovy Gstring - PullRequest
2 голосов
/ 16 июня 2011

Мне интересно, могу ли я передать переменную, которая будет оцениваться как String, внутри оценки gstring.Простейшим примером будет что-то вроде

 def var ='person.lName'
 def value = "${var}"
 println(value)

Я ищу, чтобы вывести значение lastName в экземпляре person.В качестве последнего средства я могу использовать рефлексию, но интересно, что в groovy должно быть что-то попроще, чего я не знаю.

1 Ответ

3 голосов
/ 16 июня 2011

Можете ли вы попробовать:

 def var = Eval.me( 'new Date()' )

Вместо первой строки в вашем примере.

Класс Eval задокументирован здесь

редактировать

Я предполагаю (из вашего обновленного вопроса), что у вас есть переменная person, а затем люди передают строку типа person.lName, и вы хотите вернуть свойство lName этого класса?

Можете ли вы попробовать что-то подобное с помощью GroovyShell?

// Assuming we have a Person class
class Person {
  String fName
  String lName
}

// And a variable 'person' stored in the binding of the script
person = new Person( fName:'tim', lName:'yates' )

// And given a command string to execute
def commandString = 'person.lName'

GroovyShell shell = new GroovyShell( binding )
def result = shell.evaluate( commandString )

Или это, используя прямой разбор строк и доступ к свойству

// Assuming we have a Person class
class Person {
  String fName
  String lName
}

// And a variable 'person' stored in the binding of the script
person = new Person( fName:'tim', lName:'yates' )

// And given a command string to execute
def commandString = 'person.lName'

// Split the command string into a list based on '.', and inject starting with null
def result = commandString.split( /\./ ).inject( null ) { curr, prop ->
  // if curr is null, then return the property from the binding
  // Otherwise try to get the given property from the curr object
  curr?."$prop" ?: binding[ prop ]
}
...