如何使用模块mixin将方法添加到类似哈希的ruby类?

时间:2012-06-14 17:17:38

标签: ruby metaprogramming

假设我想使用Ruby Module Mixin元编程法术(创建我自己的小DSL)来定义方法名称(:key)

module MyDsl

  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def mymethod(name)

      # name("key") 
      method_name = "#{name}".to_sym
      define_method(method_name) do |arg|
         # ...
      end

    end
  end

end

如何定义方法

name[:key]
name[:key]=val
name[:key]+=3
name[:key]++

等等

Ruby define_method(method_name)的语法是什么,允许指定[]数组/散列访问并设置值,增量值等?

1 个答案:

答案 0 :(得分:1)

您的方法name必须返回定义了[][]=方法的对象。 +=只是一个快捷方式,Ruby中没有++

如果您需要Hash的大部分方法可用,请使用哈希或查看子类DelegateClass(Hash)SimpleDelegator