让我们想象一下:
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 A
或class ClassA
。
如果您尝试:
module A
class ClassA
def MethodA
puts "You have been overridden!"
end
end
end
...然后当A::ClassA.MethodA
被调用时,你仍然会得到“我是原始人”。这是因为您真正所做的只是定义了一个名为A
deep 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] 删除。
我来说两句