2010-07-06 20 views

Trả lời

19

Bạn có một nguồn tốt trong MEAP (Early Access) cuốn sách
Gosh Cover
DSL in action từ Debasish Ghosh (blog: "Ruminations of a programmer)

khuôn khổ kiểm tra như scalatest là những ví dụ điển hình của DSL:

test("pop is invoked on an empty stack") {  
    val emptyStack = new Stack[String] 
    evaluating { emptyStack.pop() } should produce [NoSuchElementException] 
    emptyStack should be ('empty) 
    } 

Có rất nhiều khung công tác dựa trên DSL khác ngoài đó:

  • specs: "Hành vi-Driven-Thiết kế khuôn khổ"

  • internal DSLs

  • Squeryl: "Một Scala ORM và DSL để nói chuyện với cơ sở dữ liệu với tính cách rườm rà tối thiểu và loại an toàn tối đa"

 
    def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] = 
     from(artists, songs)((a,s) => 
     where(a.id === s.artistId) 
     groupBy(a.id) 
     compute(count) 
    ) 
+0

Cuốn sách thực sự hay của Foursquare. Cũng bao gồm các ngôn ngữ khác để bạn có thể so sánh cách cảm nhận DSL bằng các ngôn ngữ khác nhau. –

+0

Sách tuyệt vời. Ông Ghosh bao gồm Scala đặc biệt tốt (đó là phần tôi đọc). Ngoài ra, bạn có thể muốn đọc bài viết giáo dục, viết tốt của ông Spiewak về các trình kết hợp Parser (quan trọng đối với các DSL Scala bên ngoài) - www.codecommit.com/blog/scala/the-magic-behind-parser-combinators –

6

lift-json cung cấp DSL để tạo JSON. Ví dụ như DSL sau:

("person" -> 
    ("name" -> "Joe") ~ 
    ("age" -> 35) ~ 
    ("spouse" -> 
    ("person" -> 
     ("name" -> "Marilyn") ~ 
     ("age" -> 33) 
    ) 
) 
) 

tạo ra JSON sau:

{ 
    "person": { 
    "name": "Joe", 
    "age": 35, 
    "spouse": { 
     "person": { 
     "name": "Marilyn", 
     "age": 33 
     } 
    } 
    } 
} 
1

Hai ví dụ tốt là được xây dựng trong DSL cho Parser combinators và diễn viên. Có một trình bao bọc SQL được gọi là DBC (chưa sẵn sàng), tại đây bạn có thể thấy nó trông như thế nào: http://scala.sygneca.com/libs/dbc

0

Giấy ScalaQL (PDF) mô tả việc thực hiện một DSL thú vị cho các truy vấn cơ sở dữ liệu tích hợp ngôn ngữ.

2

ScalaModules là DSL để làm việc với OSGi.

Một số khác có sẵn với Apache Camel nền tảng để tích hợp doanh nghiệp.

Scala-QuerySqueryl cũng cung cấp DSL để truy vấn cơ sở dữ liệu trong số những thứ khác.

ScalaTest cũng là một ví dụ tuyệt vời về những gì có thể.

Các vấn đề liên quan