我可以使用哪些字符来引用这个 ruby​​ 字符串?

发布于 2024-07-24 01:01:35 字数 638 浏览 7 评论 0原文

我将 JRuby 嵌入到 Java 中,因为我需要使用 Java 字符串作为参数来调用一些 Ruby 方法。 问题是,我正在调用这样的方法:


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);

问题是,我不知道可以使用哪些字符串作为分隔符,因为如果我发送到 build_string 的 ruby​​ 代码将包含 ruby​​ 代码。 正确知道我正在使用〜,但我认为这可能会破坏我的代码。 我可以使用哪些字符作为分隔符来确保我的代码无论 ruby​​ 代码是什么都可以工作?

I'm embedding JRuby in Java, because I need to call some Ruby methods with Java strings as arguments. The thing is, I'm calling the methods like this:


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);

The thing is, I don't know what strings I can use as delimiters, because if the ruby code I'm sending to build_string will contain ruby code. Right know I'm using ~,but I think this could break my code. What characters can I use as delimiters to make sure my code will work no matter what the ruby code is?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好菇凉咱不稀罕他 2024-07-31 01:01:35

使用heredoc格式:

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

但是,这假设您在输入中的单独行上不会有“THISSHOULDNTBE”。

use the heredoc format:

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

this however assumes you won't have "THISSHOULDNTBE" on a separate line in the input.

七分※倦醒 2024-07-31 01:01:35

由于字符串文本包含任何字符,因此没有剩余字符可用于像您现在使用的 ~ 那样的引号转义。 您仍然需要转义 java 中字符串文本中的波浪号并将其附加到您正在构建的字符串中。

像这样的东西(未经测试,不是 Java 大师):

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

Since string text contain contain any character, there is no character left to use for quotation escaping like the ~ you're using now. You would still need to escape the tilde in string text in java and append that one to the string you're building.

Something like (untested, not a Java guru):

String rubyCode = "require \"myscript\"\n" +
                            "str = build_string(%q~" + text.replaceAll("~", "\\~") + "~)\n"+
                            "str";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文