Какие символы я могу использовать для цитирования этой рубиновой строки? - PullRequest
0 голосов
/ 14 июня 2009

Я встраиваю JRuby в Java, потому что мне нужно вызывать некоторые методы Ruby со строками Java в качестве аргументов. Дело в том, что я вызываю такие методы:


String text = ""; // this can span over multiple lines, and will contain ruby code
Ruby ruby = Ruby.newInstance();
RubyRuntimeAdapter adapter = JavaEmbedUtils.newRuntimeAdapter();
String rubyCode = "require \"myscript\"\n" +
                            "str = build_string(%q~"+text+"~)\n"+
                            "str";
IRubyObject object = adapter.eval(ruby, codeFormat);

Дело в том, что я не знаю, какие строки я могу использовать в качестве разделителей, потому что если код ruby, который я посылаю в build_string, будет содержать код ruby. Точно знаю, что я использую ~, но я думаю, что это может сломать мой код. Какие символы я могу использовать в качестве разделителей, чтобы убедиться, что мой код будет работать независимо от того, какой это код ruby?

Ответы [ 2 ]

1 голос
/ 14 июня 2009

использовать формат heredoc:

"require \"myscript\"\n" +
          "str = build_string(<<'THISSHOUDLNTBE'\n" + text + "\nTHISSHOULDNTBE\n)\n"+
          "str";

однако это предполагает, что у вас не будет «THISSHOULDNTBE» на отдельной строке ввода.

0 голосов
/ 14 июня 2009

Поскольку строковый текст содержит любой символ, для экранирования не осталось символов, которые вы сейчас используете. Вам по-прежнему нужно экранировать тильду в текстовом формате в java и добавлять его к строимой вами строке.

Что-то вроде (не проверено, не гуру Java):

String rubyCode = "require \"myscript\"\n" +
                            "str = build_string(%q~" + text.replaceAll("~", "\\~") + "~)\n"+
                            "str";
...