如何在Java中执行Ruby文件?

时间:2015-01-28 15:04:44

标签: java ruby jruby

我正在尝试使用Java运行Ruby代码。这段代码给了我一个空的结果。 (结果:null) 有人可以帮我找错吗?

Java:

    public static void callRuby(){

      ScriptEngine jruby = new ScriptEngineManager().getEngineByName("jruby");
        //process a ruby file
        try {           
             jruby.eval(new BufferedReader(new FileReader("rubyTest.rb")));
             jruby.put("a", "2");
             jruby.put("b", "3");   
             System.out.println("result: " +jruby.get("res"));

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}

ruby​​Test.rb

def addition(a,b)
puts a
puts b
res = a + b
end

2 个答案:

答案 0 :(得分:2)

您的rubyTest.rb脚本定义了一个函数addition(a, b),但您在哪里调用该函数?

这定义了解释器中的函数:

jruby.eval(new BufferedReader(new FileReader("rubyTest.rb")));

然后你分配顶级变量ab,然后你要求res的值,但是我没有看到程序调用{​​{1}的任何地方1}}功能。

答案 1 :(得分:0)

詹姆斯答案已经包含了解决方案。

就像dispatch_once

一样简单

如果你真的需要使用变量Intent,你可以将它们设为全局(具有全局变量的所有副作用)jruby.eval("addition(2,3)");并分配像这样的值

a, b

Java Scripting的Bindings机制似乎不能像以下代码那样工作 FAILS

$a, $b