2015-10-13 85 views
0

无法解析(检查语法)groovy代码。 parse()方法不抛出任何异常,但在执行时会抛出异常从句法上解析groovy脚本

GroovyShell gEngine = new GroovyShell(); 
gEngine.evaluate("def n; print ddd"); // throws an exception 
gEngine.parse("def n; print ddd"); // don't throws Excption 
+1

'parse'不会尝试运行脚本,'evaluate'的确如此。该代码在语法上没有问题。但是这是逻辑上的。不确定问题是什么? –

+0

它在运行时抛出异常,它不能在编译时抛出异常,因为我不想让代码执行。 – Kamal

+1

但是这个脚本没问题。 'ddd'可能会在运行时添加到脚本中,所以它会起作用。所以在编译时,它没有错误... –

回答

0

从常规API:

parse

分析给定的脚本并返回准备运行

evaluate

对求值当前绑定一些脚本,并将结果返回

正如他在评论@tim_yates笔记,evaluate运行脚本,而parse回不运行它的脚本对象,这就是为什么evaluate抛出异常:groovy.lang.MissingPropertyException: No such property: ddd

但是如果你运行的parse返回的脚本就会抛出同样的异常:

GroovyShell gEngine = new GroovyShell() 
def script = gEngine.parse("def n; print ddd") 
script.run() // throws missingPropertyException 
+0

是的script.run()实际上运行脚本并引发异常,但我期待,在运行脚本之前它可能会引发异常。在上述情况下,我们需要运行脚本,我希望在编译时出现异常 – Kamal

+1

编译时没有例外。在语法上,这是一个非常好的脚本。 'ddd'可能会在运行时添加到脚本的元类中,所以Groovy不能说它会在编译时失败 –

+0

@tim_yates你永远是对的......并且像往常一样有一个完全可以理解的解释' :)'! – albciff