2010-03-30 7 views
2

I ont un fichier ruby ​​comme suit:JRuby modules embarqués et des classes

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

maintenant si c'était une classe que je serais en mesure d'utiliser le code java suivant:

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

Cependant, cette classe repose à l'intérieur d'un module. L'appel le même code que produit l'erreur ci-dessus:

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

En outre, appeler:

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

Le module retourne pas d'erreur. Donc, on pourrait supposer que cela suit le format pour Ruby.

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

Encore une fois cependant, j'obtiens la même erreur qu'avant.

Quelqu'un peut-il aider? Comme il y a peu de documentation sur JRuby?

Merci

+0

Remarque: il est obligatoire que votre nom de classe Ruby commence par une majuscule. MyClass est ok, myclass ne l'est pas. –

+0

yeh c'est pas copié je viens de l'écrire. Je l'ai changé maintenant cependant. code sudo plus que tout –

Répondre

2

Assurez-vous que vous ne disposez pas d'erreurs de syntaxe. En général, je reçois ces erreurs quand je ne suis pas prêter attention à ce que j'écris ...

Deuxièmement, vous ne pouvez pas écrire:

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

La raison étant que votre classe est dans un module. Au lieu de cela, utilisez le ceci:

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

Sinon, je ne sais pas quel pourrait être le problème. Pour ma part, j'ai pu exécuter le code suivant sous Java 1.6 et avec jruby-engine.jar et jruby-complete-1.4.0.jar sous mon classpath.

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

votre droit était que –

Questions connexes