2009-06-14 11 views
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のコードが含まれる場合ので、私は、区切り文字として使用することができますどのような文字列を知らない、ありますルビーコード。私は〜を使用しているのを知っていますが、これが私のコードを破る可能性があります。私のコードがルビコードとは無関係に動作することを確認するために、区切り文字としてどのような文字を使用できますか?

答えて

1

はヒアドキュメントの形式を使用します。

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

これは、しかし、あなたが別の行に "THISSHOULDNTBE" を持っていないと仮定し入力。

+0

私はheredocの開始と終了で文字列を生成します。 – Geo

0

文字列には任意の文字が含まれているため、現在使用している〜のような引用符エスケープに使用する文字は残っていません。あなたはまだ、javaの文字列テキスト内のチルダをエスケープし、ビルドしている文字列にその文字列を追加する必要があります。 (Javaの第一人者、テストされていないではない)のような

何か:

String rubyCode = "require \"myscript\"\n" + 
          "str = build_string(%q~" + text.replaceAll("~", "\\~") + "~)\n"+ 
          "str"; 
関連する問題