从方法调用中创建哈希的最简单方法

时间:2012-12-31 13:51:12

标签: ruby map dry

我有这样的代码:

class Foo

  # (method definitions)

  def make_hash
    {
      some_method: some_method,
      some_other_method: some_other_method 
    }
  end

end

我怎样才能简化或干掉make_hash?我需要类似slice或Rails'attributes.slice的内容,但适用于常规类的方法。

2 个答案:

答案 0 :(得分:2)

这样的事情会有所帮助。

mlist = {}

Foo.instance_methods(false).each do |name|
  mlist[name] = Foo.instance_method(name)
end

答案 1 :(得分:2)

一种方法是使用默认值块创建哈希:

def methods_hash
    @methods_hash ||= Hash.new {|hash, key| hash[key] = self.class.instance_method(key) }
end

因此,每次请求哈希的密钥时,它都会动态加载instance_method,而不必先加载它。 instance_method方法返回对象,因此您可能希望.to_s.to_sym满足您的需求。

我对这个问题很感兴趣,并且有兴趣了解你的最终目标是什么。