Какие символы я могу использовать для цитирования этой строки рубина?
Я встраиваю 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 ответа
Используйте формат heredoc:
"require \"myscript\"\n" +
"str = build_string(<<'THISSHOUDLNTBE'\n" + text + "\nTHISSHOULDNTBE\n)\n"+
"str";
однако это предполагает, что у вас не будет "THISSHOULDNTBE" на отдельной строке ввода.
Поскольку текст строки содержит какой-либо символ, для экранирования не осталось символов, которые вы сейчас используете. Вам все равно нужно будет экранировать тильду в текстовом формате в Java и добавить его к строящейся строке.
Что-то вроде (не проверено, не гуру Java):
String rubyCode = "require \"myscript\"\n" +
"str = build_string(%q~" + text.replaceAll("~", "\\~") + "~)\n"+
"str";