Java Jruby嵌入式模块和类

Java Jruby嵌入式模块和类,java,ruby,jruby,Java,Ruby,Jruby,我有一个ruby文件,如下所示: module Example class Myclass def t_st "Hello World!" end end end 现在,如果这只是一个类,我将能够使用以下java代码: ScriptEngine jruby = new ScriptEngineManager().getEngineByName("jruby"); jruby.eval(new BufferedReader(

我有一个ruby文件,如下所示:

module Example
    class Myclass
        def t_st
            "Hello World!"
        end
    end
end
现在,如果这只是一个类,我将能够使用以下java代码:

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的文档很少


谢谢

请确保没有语法错误。通常当我不注意我写的东西时,我会犯这些错误

其次,你不能写以下内容:

Object example = jruby.eval("Myclass.new");
原因是您的类位于模块中。相反,请使用以下选项:

Object example = jruby.eval("Example::Myclass.new");
除此之外,我不知道问题出在哪里。就我自己而言,我能够在Java1.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"));

    }
}

注意:Ruby类名必须以大写字母开头。我的课没问题,我的课没有。是的,它没有被复制,我只是写了出来。不过我现在改了。sudo代码比什么都重要