2014-10-06 58 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