最近,当我试图解释为什么
Ruby on Rails是一个领域专用语言(DSL)到我组织的实习生时,我无法表达我的推理,我想要的结果.也许我不明白这个空间足以教导细微差别.将他重定向到Martin Fowler的
article或Google排名第一的InfoQ或其他资料也没有太大帮助.
有些可以解释为什么Rails是一个DSL的例子/并行的情况,这不是一个相当新的代码世界的人的巫术的东西?了解意识形态还有助于阐述轨道生态系统的复杂性?
解决方法
技术上来说,ruby不是DSL,它只是非常干净地编写内部DSLs.马丁的Fowler的博客wiki
This link将有助于澄清事情.
Rails已经被描述为DSL,尽管我更确切地将其作为一个框架,使得很好的使用几个DSL.
编辑:intro to the public version of Martin Fowler’s DSL book有一个激励的例子,虽然它仍然针对程序员更多.
再次编辑:如果你指出ruby允许ruby代码看起来像“voodoo”的例子可以是有用的
port 2001 respond :resource=>"/hello" do |request,response| response.body = "<message>hello</message>" end
这比直接调用方法更干净.实现DSL可能需要像代码一样的“voodoo”(创建DSL比使用DSL更困难),而且一般来说,相对较新的编码的人应该首先关心DSL的功能,而不是如此实现它.
什么使Ruby在内部DSL方面有好处包括(1)使用块(任何具有干净关闭的语言都具有此优点),(2)不需要括号的方法类,以及(3)能够在运行中修改类是什么验证)可能我还没有想到.