在Groovy中与eval()等价的方法是什么?

15

在Python中,我可以使用eval()来执行用户在程序中输入的代码。 在Groovy中是否有类似的功能?我想要一个SWING UI文本框,让用户输入一段我想要执行的代码?

谢谢, Hari

3个回答

13

5

是的,使用Eval.x、Eval.xy、Eval.xyz或Eval.me可以在Groovy中动态评估代码。有关这些方法的更多详细信息,请参见API文档

例如,您可以像这样使用Eval.me:

def a = "hello"
def b = "world" 
Eval.me(""" println "$a $b" """)
--> hello world

此外,查看这篇博客文章获取一些eval示例

3
你是说肯定是 Eval.xy(a, b, 'println "$x $y"') 对吧?;-) - tim_yates
好的,谢谢指出。已经从Eval.x更改为Eval.me。关于使用Eval.xy和Eval.x的问题 - 这是个人偏好的问题。在这种情况下,您可以使用其中任何一个。此外,您可以使用单引号或三重双引号。 - Kai Sternad
1
现在的解决方案在传递给 Eval.me 的字符串中对 $a$b 进行了求值,它们并没有被 Eval.me 求值... 我认为这不是本意? - GaspardP

4

尝试这个(但与任何脚本语言中的eval一样,要小心恶意代码执行):

evaluate("print new Date()")

我正在尝试在我的自定义语法中运行一小段代码-一定会检查是否存在恶意代码。 - Hari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接