什么是命名空间?

dMi*_*Mix 19 programming-languages

我没有采用通常的CS路线来学习编程,我经常听到名称空间,但我并不理解这个概念.我在网上找到的描述通常是在我不熟悉的C语境中.

我一直在做Ruby 2年,我正在努力深入了解语言和OOP.

jwl*_*jwl 45

我将提供一个更普通的描述.

说我的妻子有一个名叫苏的妹妹,我也一样.我怎么能在谈话中把他们分开?使用他们的姓氏("Sue Larson"vs"Sue Jones"). 姓氏是命名空间.

这当然是一个有限的例子,在编程中,潜在的家庭成员可能比我的例子多得多,因此碰撞的可能性更高.命名空间在某些语言(例如java)中也是分层的,它与姓氏并不相同.

但除此之外它是一个类似的概念.

  • 另一个例子:如果你在同一个应用程序中有`Building :: Key`和`Piano :: Key`,那么命名空间会将`Key`类分开. (6认同)
  • 感谢您的精彩解释。这样解释起来就很简单了。 (2认同)

ras*_*ani 16

维基百科的命名空间定义:

命名空间是一个抽象容器或环境,用于保存唯一标识符(即名称)的逻辑分组....

例如,您可以找到可用的名称空间的地方是这样的:

您可以定义常量或变量,甚至是具有通用名称的类.如果您不希望重命名此常量/变量/类,但需要另一个具有相同名称的那个,则可以在不同的命名空间中定义该新实例.

在ruby中,模块与C++中的命名空间基本相同.

例如:

module Foo
  BAZ = 1
end

module Bar
  BAZ = 2
end

puts Foo::BAZ #=> 1
puts Bar::BAZ #=> 2
Run Code Online (Sandbox Code Playgroud)

所以,在那里,你有BAZ两个模块中声明的常量(在ruby中也称为名称空间)


mik*_*kej 14

命名空间提供了一个容器来保存函数,类和常量之类的东西,以便将它们逻辑地组合在一起,并帮助避免与其他人编写的具有相同名称的函数和类冲突.

在Ruby中,这是使用模块实现的.