2014-10-06 87 views
1

我碰到这个片段在RubyDocs跑了?哈希返回一个动态值

"#{var}" => instance_method(:do_#{var}) 
+0

@sawa对不起,你已经删除了你的答案。 – pgblu 2014-10-06 17:10:00

+0

我建议使用一种方法而不是散列:'class D; def dispatcher(m)send(“to _#{m}”)end; def to_a()将“hi”结束;结束; D.new.dispatcher(“a”)=>“hi”'。 – 2014-10-06 17:41:37

+0

嗨@CarySwoveland - 问题被编辑,从而失去了一些上下文。我正在从以下页面获取此片段:[http://www.ruby-doc.org/core-2.1.3/Module.html#method-i-instance_method](http://www.ruby-doc .org/core-2.1.3/Module.html#method-i-instance_method),其中散列分配的优点是可以用其他方式扩展。 – pgblu 2014-10-06 17:48:43

回答

2
Dispatcher = Hash.new do |k, h| h[k] = instance_method "do_#{k}" end 
0
%w[d a v e].each_with_object({}) do |a, o| 
    o[a] = instance_method("do_#{a}") 
end 
0
Dispatcher = {} 
self.instance_methods.grep(/do_*/).each do |method| 
    Dispatcher[method.to_s.sub "do_", ""] = instance_method(method) 
end 

它通过匹配“的do_”前缀,并把它添加到Dispatcher哈希,所有实例方法迭代。

+0

未成年人,但你不需要'self'。 – 2014-10-06 17:43:31