Groovy 与 DSL
一:DSL?概念 ????指的是用于一个特定领域的语言(功能领域、业务领域)。在这个给出的概念中有?3个重点: ?
二:Groovy对?DSL的支持 ???? Groovy不是?DSL,而是通用的编程语言。但?Groovy却对编写出一个全新的?DSL提供了良好的支持,这些支持都来自于?Groovy自身语法的特性,比如:
??? Groovy自身不是?DSL。?Groovy官方已经发布了较多基于?Groovy书写的?DSL,比如?GANT,?GORM,XMLBuilder,?HtmlBuilder等等。 ? 三:我们的目标 ???? 实现一种使用?Groovy语法书写、用于构建?HTML的(其实就是?HtmlBuilder)的简单?DSL,如下: ?
???? 这段代码比较容易让人懂,很容易让人将?HTML与之对应起来。具体怎么实现能够通过这一段?DSL代码输出原始的?HTML呢?主要基于?Groovy的以下几个特性:
四:代码分析 meta?{?? 这段代码的含义为:调用?meta方法,参数为一个闭包,闭包不执行任何代码。 table?(style:'margin:5px;')?{?? tr?('class':'trClass',sans-serif; font-size:14px; line-height:25.2000007629395px"> 这段代码的含义为:
调用?tr方法,第一个参数为?Map,第二个参数为闭包。 闭包中,调用了?3?个?td方法,参数都为一个闭包;闭包中直接返回了一个字符串。 五:代码实现 ??? 将代码解读了以后,再结合?invokeMethod就很容易实现了,具体代码如下: def?invokeMethod(String?name,?args)?{??
六:运行
七:结论 ?? 基于Groovy自身的语法简洁和众多特性,实现一个专属的DSL还是蛮简单的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |