我在使用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字符串,以便它可以显示在另一个文本字段中?
答案 0 :(得分:2)
Pyoutput
为null
(print
不返回任何内容),因此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());
}
}