我是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
答案 0 :(得分:7)
如果删除最后一行,您会看到获得5, 4, 3, 2
。原因是类和模块的主体只是常规代码(与其他一些语言不同)。因此,在解析类/模块时将执行这些打印语句。
关于::
如何工作 - 它只是让你在范围内移动。 ::A
将引用主范围中的A
。只需A
即可在当前范围内引用A
。 A::B
将引用位于当前范围内的B
内的A
。