多级元编程 method_missing

Metaprogramming multi-level method_missing

我希望能够为模块中的两级幽灵方法提供动态代理。我假设第一级需要动态创建一个模块,其中包含一个变量,用于跟踪我的第一级调用的名称,并且缺少一个方法来接受我的第二级调用,但我不知道如何打开这进入工作代码。

module Test
    def self.method_missing(name, *args)
        #dynamically create a module and return it
        #so my 2nd level call hits its method_missing
    end
end

Test::test1::test2 应该允许我编写一个可以使用 test1test2*args.

的代理

我怎样才能实现这个想法?

编辑:我解决了第 2 级问题,但是有什么方法可以让我获得无限数量的级别吗?

我想通了:

module Test
    def self.method_missing(name, *args)
        m = Module.new
        m.instance_variable_set("@name", name)
        def m.method_missing(name1, *args)
            puts @name
            puts name1
        end
        m
    end
end

Test::test1::test2
#Output:
#  test1
#  test2