我正在学习红宝石。出于学习目的,我已经编写了嵌套模块的代码,如下所示。我的任务是从模块C打印oupupt“IN FIRST A”。我尝试了Object :: A :: A.show和:: A :: A.show但它打印输出“在第二个A”。我也试过A :: A.show,但是它给出了未初始化的常量错误。请帮助理解为什么它打印“在第二个A”和我需要做什么打印机“在第一个A”输出
module A
def self.show
puts "in outer A"
end
module A
def self.show
puts "IN FIRST A"
end
end
module A
def self.show
puts "in second A"
end
end
module C
def self.show
puts "in Third A"
end
Object::A::A.show
end
end
答案 0 :(得分:7)
考虑这个例子(完全类似):
a = 3 b = 4 b = 5 puts b # 5
如何显示
4
?
您的第一种方法是::A::show
。您的第二个和第三个都 ::A::A::show
。因此,您的第三个定义是覆盖您的第二个定义,而您只有两个方法。因此,在第三个"IN FIRST A"
运行后,打印def
的方法不存在。执行该方法的唯一方法是在第二个和第三个定义之间运行它,当它被定义但尚未被覆盖时。
(::A::A::show
也可以像你一样写成::A::A.show
,意义不变。)