В чем разница между контекстом и пространством имен? - PullRequest
0 голосов
/ 18 ноября 2011

Я слышал эти термины много раз.Честно говоря, я считаю пространство имен средой, в которой хранятся идентификаторы (и сопоставленные с ними уникальные «значения»).Контекст подобен набору данных, очень похожему на тип отображения 'key' = 'value'.Я запутался в этом.Если кто-нибудь сможет описать эти термины более четко, это будет хорошо.

Ответы [ 5 ]

1 голос
/ 18 ноября 2011

То, что вы сказали о Namespace, верно, я объясню вам в программировании, потому что я не теоретик.

namespace SampleNamespace
{
    class foo
    {
          public void run()
         {
           console.writeline("RUN");
         }
    }
}

См. Выше Пространство имен SampleNamespace содержит класс fooТеперь здесь пространство имен является средой, а класс является его данными, поэтому другое пространство имен также может содержать класс 'foo', но это же пространство имен не может содержать тот же класс.Пространство имен может содержать n чисел идентификаторов, это как организация ваших программ, чтобы избежать наличия классов с одинаковыми именами.

Контекст : он сильно отличается от пространства имен, это не среда, ноопределяет среду для объектов.Таким образом, вы можете сказать, что context - это набор свойств, который определяет Среду объекта

1 голос
/ 18 ноября 2011

Это, вероятно, зависит от того, о каком языке вы думаете, но на примере JavaScript:

var FOO = {
    bar:function(){
        return this == FOO; //=> true
        }
    };

В этом случае вы можете сказать, что FOO - это актерская игра.как пространство имен.Хотя в JavaScript нет формальной концепции пространства имен, мы определили объект и используем его для отделения определенной части кода.

Контекст - это обычно среда, в которой что-то запускается.В этом примере функция bar имеет контекст, на который ссылается ключевое слово this .При запуске функции следующим образом:

FOO.bar();

мы вызываем функцию в контексте объекта FOO , поэтому FOO присваивается это .Мы могли бы запустить код в другом контексте:

var BAZ={};
BAZ.bar = FOO.bar;
BAZ.bar();

На этот раз контекстом функции является BAZ, поэтому возвращаемое значение будет ложным.

Таким образом, оба термина определяют некоторую среду,но пространство имен является фиксированной средой, в то время как контекст может меняться в зависимости от того, как выполняется код.

1 голос
/ 18 ноября 2011

Я склонен смотреть на это так:

Пространство имен - это контейнер, в котором вы найдете элементы, имеющие контекст.

Например.

Подумайте одом.

В каждой спальне есть кровать.Допустим, есть спальня хозяев, спальня ребенка и спальня запасных.

Пространства имен здесь - это названия спален, например, Master, Child, Spare.

Теперь в спальне хозяев естьдвуспальная кровать, детская спальня, односпальная кровать и запасная комната, раскладная кровать.

двуспальная кровать имеет контекст только в главной спальне, односпальная кровать только в детской комнате и раскладная кровать вСвободная комната.

Теперь во всех спальнях есть предметы мебели (кровать, туалетный столик, шкаф), и они определены в пространстве имен мебели.

Если все комнаты ссылаются / используют пространство имен мебели, тогдаКровать, Туалетный столик, Гардероб - все имеют действительный контекст в этих комнатах, НО двуспальная кровать недопустима в Детской или Запасной комнате.

Вы, конечно, можете поставить раскладную кровать в детскую спальню, в этом случаеу него будет контекст там, хотя это будет отличаться от складной кровати уже в запасной комнате.

Если вы уберете комнату (скажем, там был пожар), то мебель, в которой находился контекст, также будет уничтожена, например, пожар в главной спальне разрушит двуспальную кровать, туалетный столик и гардероб.

0 голосов
/ 03 февраля 2019

Из Википедии: «Пространства имен обычно структурированы как иерархии, позволяющие повторное использование имен в разных контекстах»

Допустим, у вас есть два пространства имен: "пространство" и "вода" Теперь допустим, что пространство имеет идентификатор «Корабль». Также скажем, что у «воды» есть идентификатор «Корабль».

Здесь мы можем повторно использовать имена, но контекст будет другим. Таким образом, пространство имен является декларативной областью, которая предоставляет область действия идентификаторам и делает это возможным.

Пакет Java, например, организует Javaclasses в пространства имен.

Во многих языках локальные имена в вызове функции или метода имеют свое собственное пространство имен. Когда вызывается функция, для этой функции создается локальное пространство имен. Это пространство имен удаляется либо в случае завершения функции, то есть возвращает или выдает ошибку.

0 голосов
/ 01 декабря 2011
Scope is often confusing in JavaScript - on the one hand,

это может означать объект, под которым что-то вызывается (или выполняется), и на другой - это объект, под которым что-то определено. последняя называется лексической областью и считается истинной сфера в JavaScript. Лексическая область видимости позволяет такое программирование методы как замыкания; для справки, посмотрите на это отлично статья Ричарда Корнфорда.

Идея области видимости во время вызова называется контекстом выполнения в JavaScript

Этот абзац с сайта документации по додзё было полезно для меня. Я думаю, что это хороший ресурс по этому вопросу.

...