为什么JRuby给我的ruby脚本给出的全局变量是空的?

时间:2013-01-17 22:19:27

标签: java ruby jruby

我的Ruby脚本:

def start
    print "Global variable: #{$globalVariable}"
end

执行它的Java代码:

    jruby = new ScriptEngineManager().getEngineByName("jruby"); // Create engine
    jruby.eval(myRubyScriptContents);   // Evaluate my ruby script
    jruby.put("$globalVariable", this);  // Give it a global variable
    Invocable invocable = (Invocable) jruby;
    invocable.invokeFunction("start");    // Call the start method to print my variable

输出是这样的:

  

全局变量:

为什么我的变量是空的?

1 个答案:

答案 0 :(得分:0)

如果您可以在发布时提供问题的工作示例,将会很有帮助。

这是一个有效的解决方案(注意引擎put中美元符号的缺失)。

import javax.script.*;
class TesterApp {
    public static void main(String[] args) throws Exception {
        ScriptEngine jruby = new ScriptEngineManager().getEngineByName("jruby");
        jruby.eval("def start;print \"Global variable: #{$globalVariable}\";end");
        jruby.put("globalVariable", "This is a working example.");
        Invocable invocable = (Invocable) jruby;
        invocable.invokeFunction("start"); 
    }
}