2009-06-14 3 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에 보내고있다 루비 코드를 포함 할 경우 때문에이 구분 기호로 사용할 수있는 문자열 모르는입니다 루비 코드. 내가 ~을 사용하고 있음을 알았지 만 코드가 손상 될 수 있다고 생각합니다. 루비 코드가 무엇이든 관계없이 내 코드가 작동하도록하려면 어떤 문자를 구분 기호로 사용할 수 있습니까?

답변

1

는 히어 닥 형식을 사용 입력.

+0

heredoc이 시작되고 끝나는 문자열을 생성합니다. – Geo

0

문자열 텍스트에 포함 된 문자가 있기 때문에 지금 사용중인 ~와 같이 인용 이스케이프에 사용할 문자가 남아 있지 않습니다. 당신은 여전히 ​​자바의 문자열 텍스트에서 물결표를 탈출하고 당신이 짓고있는 문자열에 그 하나를 추가해야합니다. (안된 아닌 자바 전문가) 등의

뭔가 :이 그러나 당신이 별도의 줄에 "THISSHOULDNTBE"가되지 않습니다 가정

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

:

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