我想创建代表此文字行的GStringExpression
"Exception: $all"
它的构造函数可以有verbatimText
或verbatimText, strings[], values[]
我的文字应如何代表GStringExpression
?
例如此代码
new GStringExpression("Exception:", [], [ new ConstantExpression("all") ])
结果为"Exception:"
。
当我尝试在$all
内使用verbatimText
时,由于缺少all
似乎正在使用verbatim
,因为生成的代码看起来像这样,
虽然我的catchStatement
实现看起来像这样
Parameter parameter =
new Parameter(ClassHelper.make(Exception.class), "all")
ExpressionStatement returnStatement = new ExpressionStatement (
new MethodCallExpression(
new VariableExpression("this"),
new ConstantExpression("println"),
new ArgumentListExpression([
new GStringExpression(null,
[
new ConstantExpression("Exception:")
],
[ new VariableExpression("all") ]
)
])
)
)
new CatchStatement(parameter, returnStatement)
答案 0 :(得分:1)
verbatimText
生成的代码中未使用GStringExpression
。它只是在这里有错误消息,或者#"漂亮转储"一个AST。
参数strings
和values
与GStringImpl
构造函数的参数完全相同。生成的代码只将这些属性推送到堆栈中,并调用构造函数。
您无法轻松地将GString转换为GStringExpression。在Groovy中,这个解析是在脚本的上下文中使用antlr解析器完成的(而不仅仅是GString)。没有方法可以使用GString并创建GroovyExpression
。
在您的情况下,如果您要创建的GString是" hello $ {name}",那么您必须将带有ConstantExpression
的数组作为字符串参数传递给值"你好",并且作为值参数,一个数组带有VariableExpression
或FieldExpression
。
如果您要做的只是解析GString(并且您没有创建AST转换),那么您应该使用TemplateEngine
。