如何从 Ruby 中嵌套模块的深处访问顶级模块?

令人信服

让我们想象一下:

module A
   class ClassA
      def MethodA
         puts "I am the original."
      end
   end
end

module B
   module C
      module D

      end
   end
end

现在,说你只能控制里面发生了什么module D(想象是越来越需要在那里,你的代码),但是从这里您要访问,甚至延长module Aclass ClassA

如果您尝试:

module A
   class ClassA
      def MethodA
         puts "You have been overridden!"
      end
   end
end

...然后当A::ClassA.MethodA被调用时,你仍然会得到“我是原始人”。这是因为您真正所做的只是定义了一个名为Adeep inside的新模块module D

您如何编写代码来module A从内部深处访问/扩展顶层的 true module D

令人信服

我想出了这个问题的答案。您需要预先A添加::以显式访问顶级。

module ::A
   class ClassA
      def MethodA
         puts "You have been overridden!"
      end
   end
end

现在,MethodA已经真正被覆盖了,会输出“你已经被覆盖了!”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章