0

我有这样的代码:

class Foo

  # (method definitions)

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

end

我怎样才能简化或干燥make_hash?我想要类似sliceor Rails' 的东西attributes.slice,但适用于普通类的方法。

4

2 回答 2

2

这样的事情会有所帮助。

mlist = {}

Foo.instance_methods(false).each do |name|
  mlist[name] = Foo.instance_method(name)
end
于 2012-12-31T14:01:15.890 回答
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满足您的需要。

不过,我对这个问题很感兴趣,并且有兴趣知道您使用这种方法的最终目标是什么。

于 2012-12-31T14:15:28.680 回答