假设我想使用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)的语法是什么,允许指定[]数组/散列访问并设置值,增量值等?
答案 0 :(得分:1)
您的方法name
必须返回定义了[]
和[]=
方法的对象。 +=
只是一个快捷方式,Ruby中没有++
。
如果您需要Hash
的大部分方法可用,请使用哈希或查看子类DelegateClass(Hash)
或SimpleDelegator