我正在尝试使用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();
}
}
rubyTest.rb
def addition(a,b)
puts a
puts b
res = a + b
end
答案 0 :(得分:2)
您的rubyTest.rb
脚本定义了一个函数addition(a, b)
,但您在哪里调用该函数?
这定义了解释器中的函数:
jruby.eval(new BufferedReader(new FileReader("rubyTest.rb")));
然后你分配顶级变量a
和b
,然后你要求res
的值,但是我没有看到程序调用{{1}的任何地方1}}功能。
答案 1 :(得分:0)
就像dispatch_once
如果你真的需要使用变量Intent
,你可以将它们设为全局(具有全局变量的所有副作用)jruby.eval("addition(2,3)");
并分配像这样的值
a, b
Java Scripting的Bindings机制似乎不能像以下代码那样工作 FAILS :
$a, $b