1. 程式人生 > >groovy語言的動態特性

groovy語言的動態特性

執行如下groovy指令碼:

html{

    head{}

    body{}

}

groovy引擎會報錯,提示html方法不存在。這很容易理解。

現在執行如下groovy指令碼:

def invokeMethod(String name, args) {
    println "$name"
}
html{

    head{}

    body{}

}

groovy引擎沒有報錯,這就很讓人百思不得其解了。雖然html方法已經代理給了invokeMethod,但是head和body方法依然未定義呀。

後來,終於明白了。這正是groovy語言的動態特性。在編譯時,編譯器並不檢查方法是否真的存在。在執行時,才會動態查詢方法的定義。

雖然head和body方法有引用,無定義,但是在執行時,只運行了html方法,並未執行到head和body方法,所以並不會報錯。

理解了這一點,那麼如下程式碼在執行時也不會有任何問題。

def invokeMethod(String name, args) {
    println "$name"
}
html{

    head(a,b,c){}

    body(d,e,f){}

}