:: 运算符在 Ruby 中如何工作?

How does the :: operator work in Ruby?

我是 Ruby 的新手,对 :: 运算符感到困惑。为什么下面的代码会输出 2, 3, 4, 5, 1 而不是只输出 1?谢谢!

class C
  a = 5
  module M
    a = 4
    module N
      a = 3
      class D
        a = 2
        def show_a
          a = 1
          puts a
        end
        puts a
      end
      puts a
    end
    puts a
  end
  puts a
end



d = C::M::N::D.new
d.show_a

如果你删除最后一行,你会看到你会得到 5, 4, 3, 2。原因是 类 和模块的主体只是常规代码(与其他一些语言不同)。因此,这些打印语句将在解析 classes/modules 时执行。

至于 :: 的工作原理 - 它只是让您在范围内移动。 ::A 将引用主作用域中的 A。仅 A 将在当前范围内引用 AA::B 将引用 B,即在 A 内,即在当前范围内。