-1

我在 xtend 的 JvmModelinferrer 中生成一个类字段:

val exp = NodeModelUtils::getNode(rule.expression);
members+=rule.toField("text",rule.newTypeRef('java.lang.String'))[
                            ^static = true
                            val Procedure1<ITreeAppendable> b = [
                                 append('''"«exp.text.replace('"','').replaceAll("\n"," \\n ")»"''')
                            ]
                            initializer = b
                            setFinal(true)
                            setVisibility(JvmVisibility::PUBLIC)
                        ]

鉴于最初的 exp.text 是

'a
 b'

我希望生成的字段如下所示:

String text = "a \n b";

但它看起来像这样:

String text = "a n b";

好像我根本不替换换行符然后我得到:

String text = "a
               b";

这当然不会编译。问题似乎是 xtend 正在评估 java 字符串,所以即使“\n”在 java 中被编译为“\n”,在 xtend 中它也会评估为“n”

如何让 xtend 不评估 \n 以便将其保留在生成的 java 字符串中?

4

1 回答 1

0

结果你需要用“\\\\n”替换,因为你正在编写的源代码也将通过词法分析器,反斜杠需要再转义一次。

弗拉德·杜米特雷斯库提供

于 2012-09-18T11:30:20.323 回答