2009-12-30 60 views
0

我写了一个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 

我想辅助方法添加到模块定义和包括一个实例(只是实例而不是类)的模块。

你知道我如何达到这个目标吗?稍微不同的语法的答案也被赞赏。

回答

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块已经是目前的范围。