2013-04-08 119 views
4

一個基本的常規問題。爲了使我的代碼健壯,我需要使用groovy提供的Eval.me(String)。Groovy表達式評估

雖然我有一個問題,但當我嘗試進行字符串比較時會出現這種情況。

def x='yay' 
def y='yay' 
def groovyString="'$x' == '$y'" 
println Eval.me(groovyString); 

這是正確的。

但下面的代碼只是說「耶」是不能定義一個變量,

def x='yay' 
def y='yay' 
def groovyString="$x == $y" 
println Eval.me(groovyString); 

我知道,爲什麼這個錯誤來了:)有沒有辦法,我可以迴避這個問題瓦特/ o實際上需要追加' '進行字符串比較?

P.S:我需要它不僅僅適用於字符串。因此逮捕追加'

回答

2

你應該能夠用BindingGroovyShell

做到這一點。如果我們做GroovyShell的實例與綁定,默認情況下返回時,沒有財產S中的屬性的名稱發現:

def shell = new GroovyShell(new Binding([:].withDefault{ it })) 

我們可以評估你的groovyString:

shell.evaluate(groovyString) 

這基本上evalu阿泰的第一種形式,既yay性能得到解決的字符串yay

+0

它的工作原理就像一個魅力:) – Avinash 2013-04-08 12:02:03

+0

顯然,如果你需要傳遞參數,可以那麼你可以改變'[:]。withDefault {}它來'像'[a:13] .withDefault {it}'。那麼'groovyString ='a == 13''就可以工作,例如...祝你好運! – 2013-04-08 12:04:31