我正在编写DSL来生成生物信息学平面文件的解析器。我想让用户在块中定义辅助函数,然后在解析上下文对象中包含该函数。我想使用如下语法:
rules = Rules.new do
helpers do
def foo()
#...
end
def bar( baz )
#...
end
end
# Here come the parsing rules which can access both helper methods
end
我想将辅助方法添加到模块定义中,并在实例中包含模块(只是实例而不是类)。
您是否知道如何实现这一目标?语法略有不同的答案也很受欢迎。
答案 0 :(得分:1)
也许是这样的事情?
class Rules
def initialize(&block)
instance_eval &block
end
def helpers
yield
end
end
Rules.new do
helpers do
def hi_world
puts "Hello World!"
end
end
hi_world
end
请注意,虽然helpers
方法没有什么特别之处,但它只依赖于Rules
块已经是当前范围的事实。