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

San*_*khe 1 ruby

我正在学习红宝石.出于学习目的,我已经编写了嵌套模块的代码,如下所示.我的任务是从模块C打印oupupt"IN FIRST A".我尝试了Object :: A :: A.show和:: A :: A.show但它打印输出"在第二个A".我也试过A :: A.show,但是它给出了未初始化的常量错误.请帮助理解为什么它打印"在第二个A"和我需要做什么打印机"IN FIRST 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
Run Code Online (Sandbox Code Playgroud)

Ama*_*dan 7

考虑这个例子(完全类似):

a = 3
b = 4
b = 5
puts b
# 5
Run Code Online (Sandbox Code Playgroud)

我该如何显示4

你的第一种方法是::A::show.你的第二个和第三个是两个 ::A::A::show.因此,你的第三个定义是覆盖你的第二个定义,而你只有两个方法."IN FIRST A"因此,在第三次def运行之后,打印的方法不存在.执行该方法的唯一方法是在第二个和第三个定义之间运行它,当它已定义但尚未覆盖时.

(::A::A::show也可以::A::A.show像你一样写,但意义不变.)