我有这样的代码:
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
的内容,但适用于常规类的方法。
答案 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
满足您的需求。
我对这个问题很感兴趣,并且有兴趣了解你的最终目标是什么。