【问题标题】:Generating helper function module生成辅助功能模块
【发布时间】:2009-12-30 14:07:00
【问题描述】:

我正在编写一个 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

我想将辅助方法添加到模块定义中,并将模块包含在实例中(只是实例而不是类)。

你知道我怎样才能达到这个目标吗?语法略有不同的答案也很受欢迎。

【问题讨论】:

    标签: ruby metaprogramming dsl


    【解决方案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 块已经是当前作用域这一事实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 2019-10-22
      相关资源
      最近更新 更多