我正在寫groovy表達流(原來我知道)的DSL。我想讓用戶能夠編寫在流程中的某些點存儲和評估的函數。例如:groovy DSL與嵌入groovy腳本
states {
"checkedState" {
onEnter {state->
//do some groovy things with state object
}
}
}
現在,我很確定我可以用引號括住閉包並存儲它。但是,如果可能的話,編輯這些DSL時,我想保持語法突出顯示和內容幫助。我意識到閉包可能會引用來自周圍流定義的工件,當在不同的上下文中執行閉包時,該工件將不再有效,並且我對此很滿意。實際上,我想用非閉包函數定義的閉包語法。
tl; dr;我需要在評估DSL時獲取閉包的代碼,以便它可以存儲在數據庫中,稍後由腳本主機執行。
偉大的答案謝謝!如果缺少預先構建的AST渲染庫,這個答案將會勝出,但我會給它多一點時間讓其他人回答。 – 2011-12-15 18:10:08