Ruby:无法从另一个模块访问一个模块的方法

时间:2016-09-13 06:28:01

标签: ruby

我正在学习红宝石。出于学习目的,我已经编写了嵌套模块的代码,如下所示。我的任务是从模块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

1 个答案:

答案 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,意义不变。)