我听说过这些术语无数次。坦率地说,我认为一个命名空间保持标识符的环境(和独特的“价值”映射到它)。上下文是像数据集很像'key' = 'value'
类型的映射。我感到困惑的这些。如果任何人都可以更清楚地说明这些条款,这将是很好。
这可能取决于你正在考虑的语言,但是使用一些JavaScript为例:
var FOO = {
bar:function(){
return this == FOO; //=> true
}
};
在这种情况下,你可以说,FOO就像一个命名空间的作用。虽然JavaScript没有名字空间的形式概念,我们定义了一个对象,并用它来compartmentalise的代码一定peice的。
上下文通常是其中一些正在运行的环境。在这个例子中,条函数具有由该关键字引用的上下文。当运行像这样的功能:
FOO.bar();
我们调用FOO对象的上下文中的函数,因此FOO被分配到这一点。我们可以运行不同的环境下的代码:
var BAZ={};
BAZ.bar = FOO.bar;
BAZ.bar();
这一次函数的上下文是BAZ,因此,返回值将是错误的。
所以,这两个术语定义某种环境,但同时环境可以改变取决于代码是如何正在运行一个命名空间是固定的环境。
我倾向于看它是这样的:
命名空间是在其中发现有上下文项的容器。
例如。
想想一个房子。
每间卧室有一张床。比方说,有主卧室,蔡尔兹间卧室和一间空余的卧室。
这里的命名空间是卧室e.g法师,孩子的名字,备用。
现在主卧室有一张双人床,儿童卧室有一张单人床和空余的房间一张折叠床。
双人床只有主卧室内的情况下,单人床仅在儿童卧室和空余的房间内的折叠床。
现在,所有的卧室有家具的物品(床,梳妆台,大衣柜),这些都是在家具空间中定义的。
如果所有房间参考/使用的家具命名空间,然后床,梳妆台,大衣柜都内的客房有效的上下文,而是一张双人床不是孩子或空余的房间内有效。
当然,你可以把一张折叠床到儿童卧室在这种情况下,将有背景有,虽然这将是不同的上下文到的折叠床已经在空余的房间。
如果你删除一个房间(比如发生了火灾),那么有环境中它也将被销毁例如家具在主卧室起火会破坏双人床,梳妆台和衣柜。
你说什么Namespace
是正确的,我会解释你在编程方式堂妹我不是一个理论的人。
namespace SampleNamespace
{
class foo
{
public void run()
{
console.writeline("RUN");
}
}
}
见上面的命名空间SampleNamespace
包含类foo
,现在这里的命名空间是一个环境和类是它的数据,所以另一个名字空间也可以包含类“富”,但相同的命名空间不能包含同一个类。命名空间可以包含标识符的n个,其状如组织你的程序,以避免同名类。
背景:这是远远超过命名空间不同,它不是一个环境,但它定义为对象的环境。所以,你可以说环境是属性的集合定义对象的环境
Scope is often confusing in JavaScript - on the one hand,
它可以指在其下的东西被调用(或执行)的对象,并在另一方面,它是在其下的东西被定义的对象。后者被称为词法作用域,并且被认为是在JavaScript的真实范围。词法作用域使得这样的编程技术如封闭件;作为参考,看看由理查德康福德这个优秀的文章。
调用期间的范围想法被称为在JavaScript的执行上下文
这从dojo documentation website段落是对我有帮助。我认为这是关于这个问题的一个很好的资源。
维基百科:“命名空间通常被构造为层次结构,允许在不同的上下文中的名字重用”
比方说,你有两个命名空间:“空间”和“水”现在让我们假设空间具有标识符“船”。让我们也说,“水”有标识“船”。
在这里,我们可以重用的名字,但背景会有所不同。所以命名空间,提供了一个范围标识符和实现这一目标的声明区。
Java包例如组织Javaclasses到命名空间。
在许多语言中的函数或方法调用本地的名字都有自己的命名空间。当一个函数被调用时,这个函数创建一个局部命名空间。此命名空间被删除或者如果函数结束,即返回或抛出错误。