ms-*_*-tg 34
使用gem可以使用Docile gem,或者通过阅读源代码来了解它的工作方式,这样可以很容易.
假设您想通过DSL 制作比萨饼
Pizza = Struct.new(:cheese, :pepperoni, :bacon, :sauce)
Run Code Online (Sandbox Code Playgroud)
并且您使用构建器模式来制作Pizza
class PizzaBuilder
def cheese(v=true); @cheese = v; end
def pepperoni(v=true); @pepperoni = v; end
def bacon(v=true); @bacon = v; end
def sauce(v=nil); @sauce = v; end
def build
Pizza.new(!!@cheese, !!@pepperoni, !!@bacon, @sauce)
end
end
Run Code Online (Sandbox Code Playgroud)
你想要一个DSL,比如说
@sauce = :extra
pizza do
bacon
cheese
sauce @sauce
end
# => should return Pizza.new(true, false, true, :extra)
Run Code Online (Sandbox Code Playgroud)
您所要做的就是将披萨方法定义为
require 'docile'
def pizza(&block)
Docile.dsl_eval(PizzaBuilder.new, &block).build
end
Run Code Online (Sandbox Code Playgroud)
砰,你做完了.
| 归档时间: |
|
| 查看次数: |
22355 次 |
| 最近记录: |