我有一个类Wrapper
,它支持添加您可以稍后查找的选项。它将这些选项存储在内部哈希@dict
中。
w = Wrapper.new
w.foo # => NameError
w.foo = 10
w.foo # => 10
如何为method_missing
撰写Wrapper
,以便我可以支持@dict
上的嵌套调用?
w = Wrapper.new
w.foo.bar.baz = 1000
w.foo.bar.baz # => 1000
答案 0 :(得分: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