我使用的是jython2.5.1和JSR-223(即。javax.script包),我希望返回Python脚本的最后一行。例如,评估此脚本后:
class Multiplier:
def multiply(self, x, y):
return x * y
Multiplier().multiply(5, 7)
我应该回35,但是我得到的是零。另一方面,它与另一个测试一起工作:
^{pr2}$我做错什么了?在
以下是Java代码:
public static void main(String[] args) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
FileReader f = new FileReader("Multiplier.py");
Object result = engine.eval(f);
//assert(result == 35);
}
PS:它与JRuby、Groovy和Rhino配合得很好,即总是返回最后一行。在
提前谢谢。在
我也有同样的问题。我编写了一个支持JSR223的脚本库,并提交了http://bugs.jython.org/issue1798:
至少,如果你
eval("x=5\nx")
看起来你会得到这个值。在这是一个Python语言问题,而不是Jython或jsr223问题。Python区分表达式(有值)和语句(没有值)。您传递的脚本是一个语句。如果你传递了一个表达式,它就会有一个值。在
您看到Ruby和JavaScript不同的原因是,复合语句的值是最后一个语句的值。例如,比较Ruby:
使用Python:
^{pr2}$JavaScript似乎介于两者之间。与Ruby一样,赋值计算的是赋值。但是,块中最后计算的语句将返回,但不能用作表达式的一部分:
更新:在我最初的回答中,我实际上遗漏了OP的目标(和问题),该问题已在评论中澄清。我正在相应地更新我的答案。在
首先更新
Multiplier.py
脚本,如下所示:然后从Java代码中这样调用它:
^{pr2}$运行上述代码时,我得到以下输出:
相关问题 更多 >
编程相关推荐