2009-12-30 33 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塊已經是目前的範圍。