-1

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

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) 允许指定 [] 数组/散列访问并设置值、递增值等的语法是什么?

4

1 回答 1

1

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

如果您需要大多数方法Hash可用,请使用 Hash 或查看子类化DelegateClass(Hash)SimpleDelegator

于 2012-06-15T22:37:21.893 回答