2010-06-18 52 views
1

我有一個類Wrapper,支持添加選項,然後您可以稍後查看。它將這些選項存儲在內部散列表@dict中。我該如何寫這個'method_missing`?

w = Wrapper.new 
w.foo # => NameError 
w.foo = 10 
w.foo # => 10 

我怎麼能寫Wrapper一個method_missing,這樣我可以在@dict支持嵌套調用?

w = Wrapper.new 
w.foo.bar.baz = 1000 
w.foo.bar.baz # => 1000 

回答

5

如果這不是你要找的,請發表評論。

class Wrapper 
    def initialize(d={}) 
    @dict = d 
    end 

    def method_missing(method, *args) 
    if method.to_s =~ /=$/ 
     @dict[method.to_s.match(/^(.*)=$/)[1].to_sym] = args.first 
    else 
     @dict[method] ||= Wrapper.new 
    end 
    end 
end 

w = Wrapper.new 
w.foo = 5 
w.foo #=> 5 
w.x.y.z = 32 
w.x.y.w = 43 
w.x.y.z #=> 32 
w.x.y.w #=> 43 
+0

這是否支持OP的鏈接請求? – Jeriko 2010-06-18 23:12:43

+1

@Jeriko - 看看最後的句子。是。 – Adrian 2010-06-18 23:23:17