java在beanshell中计算代码字符串并获取beanshell解释器返回的值
我与beanshell bsh-2.0b4合作。jar文件。我已经构建了path,并在java程序中使用了它。我已设法从控制台获取打印语句。但是如果返回值,如何获取返回值
import java.io.*;
import bsh.Interpreter;
import bsh.EvalError;
public class CaptureDis {
/**
* @param args
*/
public static void main(String[] args) {
Interpreter i = new Interpreter();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps2 = System.out;
try {
//i.eval(System.out.println("System.out.println(\"test\");"));
i.eval("int x=2; int y=3; int res=x+y; return res");
i.getOut();
} catch (EvalError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String out = baos.toString();
System.setOut(ps2);
System.out.println(out);
}
}
# 1 楼答案
eval方法返回'res'。实际上,您也可以在脚本中省略return语句,因为默认情况下beanshell返回最后一个计算的表达式
# 2 楼答案
我没有测试您的脚本,但我怀疑您缺少HashSet的import语句。实际上,脚本中不需要HashSet声明。因为您在调用之前设置了“hs”,所以解释器知道这一点。您的脚本应该如下所示:
请注意,关于第一个问题,如果在调用之前没有设置“hs”,则需要显式返回它,因为最后一个计算表达式(hs.add(i))返回布尔值。但是,由于您正在传递对“hs”的引用,因此根本不需要返回它