java - 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(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");

原因是您的类(class)在模块中。相反,使用这个:

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"));

    }
}

关于java - Jruby 嵌入式模块和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548442/

相关文章:

java - 如何解决Play Framework中的空指针异常?

java - 使用二维并行数组存储数据

ruby - 使用 Mechanize 获取链接的 "href"

ruby - 使用 Facebook 身份验证的 Sinatra session

ruby-on-rails - 使用 Jruby/Rails 实现 Google 的 hashbang/Ajax 爬网?

debugging - 无法为 jruby 运行调试器

java - 重绘方法后无法在 JPanel 上绘图

java - 如何遍历 Object 引用的数组?

ruby-on-rails - 如何配置 WEBrick 以在 Rails 中使用 SSL?

ruby - ActiveMessaging、ActiveResources 或 Ruby XMLRPC