2

gstring評価内で文字列として評価される変数を渡すことができるかどうか疑問に思っています。最も簡単な例は次のようなものになります

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

私はpersonインスタンスのlastNameの値を出力することを探しています。最後の手段として、リフレクションを使用できますが、Groovyには、私が気付いていない、もっと単純なものがあるはずだと思います。

4

1 に答える 1

4

試してみてください:

 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 ]
}
于 2011-06-15T21:07:03.140 に答える