有趣的DSL,在Scala中实现?

时间:2010-07-06 13:53:10

标签: scala dsl

我在Scala中看到了BASICApache Camel DSL,他们真是太棒了。还有这种DSL的更多例子吗?

7 个答案:

答案 0 :(得分:19)

您在MEAP(早期访问)书中有很好的资料来源 Gosh Cover
来自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的框架:

  • specs:“行为驱动设计框架”

  • internal DSLs

  • Squeryl:“用于与数据库进行通信的Scala ORM和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-QuerySqueryl还提供用于查询数据库的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)