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

mla*_*nca 5 ruby syntax constants

我是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
Run Code Online (Sandbox Code Playgroud)

ndn*_*kov 7

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

至于如何::工作 - 它只是让你在范围内移动.::A将参考A主要范围.只是在当前范围内A引用A.A::B将引用当前范围B内的A,即内部.