我有几个使用FactoryBuilderSupport(SwingBuilder是典型示例)制作的“构建器”GroovyDSL,主要是因为性能问题(也因为我担心Groovy的未来,例如Groovy 3是否会包含一个新的MOP?),我正在寻找基于JVM的内部DSL的替代框架。
由于Clojure同时具有闭包和宏,它是一个有价值的候选者,但是我不知道Clojure如何容易地操作动态绑定Java对象,就像在Groovy脚本中一样(顺便说一句,我熟悉LISP语言,但不熟悉Clojure的特定特性)。
此外,我想如果我等待足够长的时间,Java8的Nashorn会添加Javascript作为另一个可能的候选者。
那么,与Groovy相比,Clojure(甚至JavaScript)在支持这种DSL方面有多好呢?
Clojure可能是创建DSL的最佳JVM语言,因为它具有宏。一些可能会启发您的示例(取自https://stackoverflow.com/a/3968289/476116):
当然,跷跷板是摇摆DSL的一个例子。