2010-03-30 2 views
2

내가 루비 파일이 :JRuby를 임베디드 모듈과 클래스

module Example 
    class Myclass 
     def t_st 
      "Hello World!" 
     end 
    end 
end 

지금 나는 다음과 같은 자바 코드를 사용 할 수있을 것입니다 단지 클래스 인 경우 : 그러나

ScriptEngine jruby = new ScriptEngineManager().getEngineByName("jruby"); 
jruby.eval(new BufferedReader(new FileReader("example.rb"))); 
Object example = jruby.eval("Myclass.new"); 

는, 이 클래스는 모듈 내부에있다. 전화, 또한

Exception in thread "main" org.jruby.embed.EvalFailedException: uninitialized constant myclass 

: 위와 같은 코드를 호출하면 오류가 발생

Object example = jruby.eval("Example"); 

모듈은 오류를 반환하지 않습니다. 따라서 Ruby의 형식을 따르는 것으로 가정합니다.

Object example = jruby.eval("Example::myclass.new"); 

그러나 이전과 동일한 오류가 발생합니다.

아무도 도와 줄 수 있습니까? JRuby에 대한 문서가 거의 없으므로?

감사합니다.

+0

참고 : Ruby 클래스 이름은 대문자로 시작해야합니다. MyClass는 괜찮습니다. myclass는 그렇지 않습니다. –

+0

yeh 그 사본이 없습니다. 방금 썼습니다. 나는 그것을 지금 바꿨다. sudo 코드는 무엇보다 –

답변

2

구문 오류가 없는지 확인하십시오. 내가 두 번째로

... 내가 무엇을 쓰기에주의를 지불하지있을 때 일반적으로 나는 이러한 오류를 얻을, 당신은 다음과 같은 쓸 수 없습니다 :

Object example = jruby.eval("Myclass.new"); 

이유는 클래스가 모듈에 있는지 것. 대신 다음을 사용하십시오.

Object example = jruby.eval("Example::Myclass.new"); 

이외에는 어떤 문제가 있는지 알 수 없습니다. 나 자신을 위해 Java 1.6에서 jruby-engine.jar 및 jruby-complete-1.4.0.jar을 사용하여 다음 코드를 실행할 수있었습니다.

package test; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 

public class MyJavaClass { 
    public static void main(String arg[]) throws ScriptException, 
      FileNotFoundException { 

     ScriptEngine jruby = new ScriptEngineManager().getEngineByName("jruby"); 
     jruby.eval(new BufferedReader(new FileReader("example.rb"))); 
     Object example = jruby.eval("Example::Myclass.new"); 
     jruby.put("a", example); 
     System.out.println(jruby.eval("$a.t_st")); 

    } 
} 
+0

당신의 권리는 –

관련 문제