2015-10-13 33 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