我有这样的代码:
class Foo
# (method definitions)
def make_hash
{
some_method: some_method,
some_other_method: some_other_method
}
end
end
我怎样才能简化或干燥make_hash
?我想要类似slice
or Rails' 的东西attributes.slice
,但适用于普通类的方法。
这样的事情会有所帮助。
mlist = {}
Foo.instance_methods(false).each do |name|
mlist[name] = Foo.instance_method(name)
end
一种方法是使用默认值块创建哈希:
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
满足您的需要。
不过,我对这个问题很感兴趣,并且有兴趣知道您使用这种方法的最终目标是什么。