- Groovy 教程
- Groovy - 首页
- Groovy - 概述
- Groovy - 环境
- Groovy - 基本语法
- Groovy - 数据类型
- Groovy - 变量
- Groovy - 运算符
- Groovy - 循环
- Groovy - 决策
- Groovy - 方法
- Groovy - 文件 I/O
- Groovy - 可选值
- Groovy - 数字
- Groovy - 字符串
- Groovy - 范围
- Groovy - 列表
- Groovy - 映射
- Groovy - 日期和时间
- Groovy - 正则表达式
- Groovy - 异常处理
- Groovy - 面向对象
- Groovy - 泛型
- Groovy - 特质
- Groovy - 闭包
- Groovy - 注解
- Groovy - XML
- Groovy - JMX
- Groovy - JSON
- Groovy - DSL
- Groovy - 数据库
- Groovy - 构建器
- Groovy - 命令行
- Groovy - 单元测试
- Groovy - 模板引擎
- Groovy - 元对象编程
- Groovy 有用资源
- Groovy - 快速指南
- Groovy - 有用资源
- Groovy - 讨论
Groovy - DSL
Groovy 允许在顶级语句中省略方法调用参数周围的括号。这被称为“命令链”功能。此扩展通过允许将此类无括号方法调用链接起来,既不需要参数周围的括号,也不需要链接调用之间的点来工作。
如果调用以 a b c d 的形式执行,则实际上等效于 a(b).c(d)。
DSL 或领域特定语言旨在以简化 Groovy 代码的方式编写,使其易于普通用户理解。以下示例显示了领域特定语言的确切含义。
def lst = [1,2,3,4] print lst
以上代码显示了使用 println 语句将数字列表打印到控制台。在领域特定语言中,命令将如下所示:
Given the numbers 1,2,3,4 Display all the numbers
因此,以上示例显示了编程语言的转换以满足领域特定语言的需求。
让我们来看一个如何在 Groovy 中实现 DSL 的简单示例:
class EmailDsl { String toText String fromText String body /** * This method accepts a closure which is essentially the DSL. Delegate the * closure methods to * the DSL class so the calls can be processed */ def static make(closure) { EmailDsl emailDsl = new EmailDsl() // any method called in closure will be delegated to the EmailDsl class closure.delegate = emailDsl closure() } /** * Store the parameter as a variable and use it later to output a memo */ def to(String toText) { this.toText = toText } def from(String fromText) { this.fromText = fromText } def body(String bodyText) { this.body = bodyText } } EmailDsl.make { to "Nirav Assar" from "Barack Obama" body "How are things? We are doing well. Take care" }
当我们运行上述程序时,我们将得到以下结果:
How are things? We are doing well. Take care
关于上述代码实现,需要注意以下几点:
使用接受闭包的静态方法。这通常是实现 DSL 的一种无忧无虑的方式。
在电子邮件示例中,类 EmailDsl 具有 make 方法。它创建一个实例并将闭包中的所有调用委托给该实例。这就是“to”和“from”部分最终在 EmailDsl 类中执行方法的机制。
调用 to() 方法后,我们将文本存储在实例中以供稍后格式化。
现在,我们可以使用易于理解的简单语言调用 EmailDSL 方法,以便最终用户理解。
广告