【发布时间】:2013-12-18 14:15:26
【问题描述】:
我想知道 Dart 是否能够在运行时通过 Groovy 所具备的这种委托支持来执行闭包?请参阅此示例以更好地理解:A Groovy DSL from scratch in 2 hours。
我有一个用 Groovy 编写的 DSL,用于轻松定义 MARC 库记录。我希望能够通过将定义调用绑定到我的程序中的委托类来本地处理类似的 Dart 脚本。
record {
leader "00000nam a2200000 u 4500"
controlfield "001", "LIB001"
controlfield "005", "20120311123453.0"
datafield("100") {
subfield "a", "Author of record"
}
datafield("245", "0") {
subfield "a", "Title of record"
}
}
您可能想知道:为什么这不能用 JSON 表示?有了这样的 DSL,我可以做的不仅仅是表达数据。因为它是嵌入的,所以您可以在 DSL 中做任何在宿主语言中有效的事情(本例是 Groovy)。如果您必须使用不同的值多次定义同一事物,则可以执行 for 循环,您可以使用 GString 表达式、调用数据库、访问文件等。定义 DSLD 后,IDE 就像它一样了解您的概念一直是语言的一部分,它可以为您提供辅助工具。它具有很强的表现力和直观性。
我正在寻找 Dart 类似的东西。
【问题讨论】:
-
领域特定语言 - 代码以一种语言编写,错误以另一种语言给出:)
-
您能详细说明一下吗? :) 我目前仅将 DSL 用于小任务。但也许在考虑将它用于更大的东西之前我必须更加小心。有没有文章谈论 DSL 的缺点?