簡體   English   中英

Groovy-執行之前的類型檢查關閉代碼

[英]Groovy - Type Check Closure Code Before Execution

我有一個Groovy script ,該Groovy script可讓用戶定義一些動態屬性和方法,並稍后執行用戶定義的閉包。 腳本如下所示:

// init properties and methods dynamically at runtime
context.prop1 = "Some test value"
context.method1 = { String input ->
    "exec " + input.toUpperCase()
}

// "this" is set to the context variable from above
run {
    println method1( prop1 )
}

因此,在腳本的開頭,將使用用戶定義的屬性(例如prop1 )和方法(例如method1 )來初始化context 然后將上下文用作運行閉包中的this指針。 我通過動態擴展上下文的元類並將上下文設置為運行閉包的委托(使用DELEGATE_FIRST作為解決策略)來實現此目的。

目前,我正在努力進行類型檢查 在執行運行關閉之前,我想檢查method1真的期望prop1 我已經研究了DelegatesTo批注,但這似乎不適用於動態擴展的對象。 我也玩過AST,但是由於我對該主題的了解有限,所以我沒有提出解決方案。 如果我想實現的目標是可能的,那么朝正確方向的任何指針將不勝感激。

您想在運行時將方法添加到上下文中,然后在執行該方法之前鍵入check this。

類型檢查在編譯時完成。 那是在程序任何內容執行之前。 通常,除非有辦法靜態聲明它並賦予編譯器執行檢查的能力,否則通常不可能檢查只有在運行時才會發生的任何事情。 但這通常意味着您必須進行靜態編譯。

一種方法是使用類型檢查擴展名 ,但是我認為在您的情況下這可能會過大。 一種更簡單的方法是使用擴展模塊 最簡單的方法是使用自定義腳本基類

但是對於這些解決方案中的任何一個,您都需要靜態編譯才能真正進行類型檢查,這與DelegatesTo相同(通常與擴展模塊結合使用)。 對於類型檢查的DSL,類型檢查擴展和擴展模塊的混合可以很好地工作。 但是,您當然會失去該語言的更多動態特性和一些簡單性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM