:: 运算符在 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
将在当前范围内引用 A
。 A::B
将引用 B
,即在 A
内,即在当前范围内。
我是 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
将在当前范围内引用 A
。 A::B
将引用 B
,即在 A
内,即在当前范围内。