Jruby嵌入式模块和类

时间:2010-03-30 20:24:56

标签: 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(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的文档很少?

由于

1 个答案:

答案 0 :(得分: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"));

    }
}