2010-06-18 47 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