-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 文字列を評価しているように思われるため、Java では "\n" が "\n" にコンパイルされますが、xtend では "n" に評価されます。

\n を評価しないように xtend を取得して、生成された Java 文字列に保存するにはどうすればよいですか?

4

1 に答える 1

0

書いているソースコードもレクサーを通過し、バックスラッシュにはもう1つのエスケープが必要になるため、「\\\\n」に置き換える必要があることがわかりました。

ヴラド・ドゥミトレスクの礼儀

于 2012-09-18T11:30:20.323 に答える