我正在努力完成这项工作(这是一个简化的示例):
console do
say "Hello"
say "Bye"
end
在这里,我想以某种方式使
say
方法仅在提供给 console
方法的块内可用。假设 console
只是将参数打印到 stdout,您将如何定义 say
方法?
instance_eval
来评估响应 say
的对象上下文中的块。该对象可以是提供 DSL 的类的实例,例如:
class DSL
def say(arg)
puts arg
end
end
def console(&block)
dsl = DSL.new
dsl.instance_eval(&block)
end
console do
say "Hello"
say "Bye"
end