16

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

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

4

6 回答 6

12

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

  • Sinatra是一种非常流行的用于构建 Web 应用程序的 DSL,它在 GitHub 上是开源的。
  • Twibot是受 Sinatra 启发的一种较新的 DSL,可让您创建自动响应消息和回复的 Twitter 机器人。

如果您想开始自己制作,这里有一个名为Building a DSL in Ruby的优秀教程。

于 2009-05-22T19:55:51.987 回答
3

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

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

虽然我不得不承认 RSpec 代码有时让我摸不着头脑,因为我还是个新手。

于 2010-10-27T02:29:07.937 回答
2

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

  1. 符号符合意义,即如果您阅读 DSL 中的一个句子(陈述),您对它的作用有一个清晰、明确的概念。
  2. 特定领域,即 DSL 并不能解决宇宙中的所有问题,而是专注于一个小领域(例如构建软件、查询数据或构建 UI)
  3. 高级抽象。DSL 使用程序员可以使用的高级概念,并将这些概念转换为较低级别的实现(内部)。在 Rake 的情况下,该语言所基于的主要概念是任务和它们之间的依赖关系。
于 2009-06-09T19:50:24.570 回答
2

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

于 2012-10-31T18:29:40.677 回答
1

我能想到的一些好的 ruby​​ DSL 是 hpricotsinatra

于 2009-05-22T19:53:34.813 回答
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 示例。

于 2013-01-15T11:08:38.883 回答