Ruby DSL(域特定语言)存储库,示例

时间:2009-05-22 19:48:04

标签: ruby dsl

我正在寻找Ruby DSL(领域特定语言)的优秀示例。您知道哪些存储库,项目值得一读?为什么它(或者是它们)是很好的例子?

我对经过深思熟虑和设计的更复杂的例子特别感兴趣。

6 个答案:

答案 0 :(得分:12)

Rake and Rack是DSL的一些很好的例子。如果您想了解更多示例,请查看以下内容:

  • Sinatra是一款非常流行的用于构建Web应用程序的DSL,它是GitHub上的开源代码。
  • Twibot是灵感来自Sinatra的新型DSL,可让您创建自动回复消息和回复的Twitter机器人。

如果你想开始制作自己的,这是一个很好的教程,叫做Building a DSL in Ruby

答案 1 :(得分:3)

在行为驱动开发领域,您可以查看:

  • Cucumber - 使用场景描述BDD
  • RSpec - 将测试代码替换为指定行为。

虽然我不得不承认RSpec代码有时会让我挠头,因为我还是一个新手。

答案 2 :(得分:2)

另一个例子当然是Rake,Ruby构建系统。是什么让DSL在我看来“好”:

  1. 符号符合意义,即如果你在DSL中读到一个句子(语句),你就可以清楚,明确地了解它的作用。
  2. 特定于域,即DSL不能解决宇宙中的每个问题,而是专注于一个小域(例如构建软件,查询数据或构建UI)。
  3. 高级抽象。 DSL使用程序员可以使用的高级概念,并将其转换为较低级别的实现(内部)。在Rake的情况下,语言所基于的主要概念是它们之间的任务和依赖关系。

答案 3 :(得分:2)

您是否检查过Docile gem,这可能是满足您需求的最简单,最干净的方式?

答案 4 :(得分:1)

我能想到的一些优秀的红宝石DSL hpricotsinatra

答案 5 :(得分:0)

Ruby on Rails的Active Record是一个DSL!

http://apidock.com/rails/ActiveRecord/Base

此代码学校的这一集可能很有​​趣,因为它导致构建DSL(我在那里学习Active Record是DSL)

http://www.codeschool.com/courses/ruby-bits-part-2

上述课程还讨论了外部和内部DSL。 Cucumber是一个外部DSL的示例,您需要构建解析器和编译器等.Active Record是在一些现有代码中运行的内部DSL的示例。