我收到的文本里面包含${somethingElse}
,但它只是一个普通的字符串。
我上课了:
class Whatever {
def somethingElse = 5
void action(String sth) {
def test = []
test.testing = sth
assert test.testing == 5
}
}
是否可以使用groovy?
编辑:
我的场景是:加载xml文件,其中包含的值的节点指向我的应用程序中的其他值。所以我要说shell.setVariable("current", myClass)
。现在,在我的xml中,我希望能够将${current.someField}
作为值。
麻烦的是,xml的值是一个字符串,我无法轻易评估它。
我无法预测这些“价值”将如何由用户创建,我只是让他们能够使用几个类。
我无法在加载xml文件时转换它,它必须是“按需”,因为我在特定情况下使用它,我希望它们能够在那个时刻使用值,而不是在xml时文件已加载。
任何提示?
答案 0 :(得分:2)
你可以做的一件事是:
class Whatever {
def somethingElse = 5
void action( String sth ) {
def result = new groovy.text.GStringTemplateEngine().with {
createTemplate( sth ).make( this.properties ).toString()
}
assert result == "Number 5"
}
}
// Pass it a String
new Whatever().action( 'Number ${somethingElse}' )
答案 1 :(得分:0)
首先,我们做了什么,在xml中使用了这种格式:
normalText#codeToExecuteOrEvaluate#normalText
并使用replace
闭包来代表regexp和groovyShell.evaluate()
。
疯。花了很多时间和很多记忆。
最后,我们将格式更改为原始格式以及我们希望能够评估的每个字符串的crated脚本:
Script script = shell.parse("\""+stringToParse+"\"")
,其中
stringToParse = "Hello world @ ${System.currentTimeMillis()}!!"
然后我们可以根据需要多次调用script.run()并且一切都运行良好。 它实际上仍然存在。