Jython无法将eval输出作为String

时间:2017-01-19 18:35:15

标签: java jython

我在使用Jython时遇到问题,我希望捕获eval函数的输出:

example <- data.frame(flag_new = c(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE),
                      percentage =sample(1:100,22)/100)
n.Row <- nrow(example)

# initialization
example$K <-0
example$R <-0
example$K[1] <-100
example$R[1] <-example$K[1]*example$percentage[1]

#loop
for(i in 2:n.Row){
  if(example$flag_new[i]){
    example$K[i] <-100

  } else {
    example$K[i] <-example$K[i-1]-example$R[i-1]
  }
  example$R[i] <- example$K[i]*example$percentage[i]
}

这就是我认为可以做到的,但转而成为对象的引用。经过一些谷歌搜索后,我找到了方法,只能访问以前评估过的特定变量等。

我也试过exec:

Object Pyoutput = pyEngine.eval("print('Hello World')");
System.out.println(Pyoutput.toString());

但是这不能分配给变量,因为它的类型是无效的。所以我的问题是,是否可以将eval或exec的整个输出恢复为Java字符串,以便它可以显示在另一个文本字段中?

1 个答案:

答案 0 :(得分:2)

问题中的{p> Pyoutputnullprint不返回任何内容),因此Pyoutput.toString()会产生NullPointerException

它适用于产生值的表达式。以下程序打印6

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main {
  public static void main(String[] args) throws ScriptException {
    ScriptEngine pyEngine = new ScriptEngineManager().getEngineByName("python");
    Object Pyoutput = pyEngine.eval("2*3");
    System.out.println(Pyoutput.toString());
  }
}