我在Scala中看到了BASIC和Apache Camel DSL,他们真是太棒了。还有这种DSL的更多例子吗?
答案 0 :(得分:19)
您在MEAP(早期访问)书中有很好的资料来源
来自Debasish Ghosh的DSL in action(博客:“Ruminations of a programmer)
像scalatest这样的测试框架是DSL的典型例子:
test("pop is invoked on an empty stack") {
val emptyStack = new Stack[String]
evaluating { emptyStack.pop() } should produce [NoSuchElementException]
emptyStack should be ('empty)
}
还有许多其他基于DSL的框架:
def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] = from(artists, songs)((a,s) => where(a.id === s.artistId) groupBy(a.id) compute(count) )
答案 1 :(得分:6)
lift-json提供了一个生成JSON的DSL。例如以下DSL:
("person" ->
("name" -> "Joe") ~
("age" -> 35) ~
("spouse" ->
("person" ->
("name" -> "Marilyn") ~
("age" -> 33)
)
)
)
创建以下JSON:
{
"person": {
"name": "Joe",
"age": 35,
"spouse": {
"person": {
"name": "Marilyn",
"age": 33
}
}
}
}
答案 2 :(得分:2)
ScalaModules是用于处理OSGi的DSL。
另一个可用Apache Camel企业集成平台。
Scala-Query和Squeryl还提供用于查询数据库的DSL。
ScalaTest也是可能的一个很棒的例子。
答案 3 :(得分:1)
两个很好的例子是用于Parser Combinators和Actors的内置DSL。有一个名为DBC的SQL包装器(尚未准备好),您可以在这里看到它的外观:http://scala.sygneca.com/libs/dbc
答案 4 :(得分:1)
XML in Scala是另一个例子。
答案 5 :(得分:0)
ScalaQL论文(PDF)描述了用于语言集成数据库查询的有趣DSL的实现。
答案 6 :(得分:0)