Зачем мне использовать пространства имен в AS3? - PullRequest
1 голос
/ 02 мая 2011

Я рассмотрел использование пространств имен в ActionScript 3, и, честно говоря, я не понимаю, зачем они нужны. У кого-нибудь есть убедительный пример их использования?

Я также нахожу их странно сложными для реализации.

Ответы [ 3 ]

3 голосов
/ 02 мая 2011

Это хорошая статья о пространствах имен: http://gskinner.com/blog/archives/2010/01/a_complete_guid.html

Я избегаю использовать их в своем собственном коде ... но иногда мне нужно использовать их при работе с классами фреймворков. Например, ObjectProxy использует их.

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

0 голосов
/ 21 мая 2017

Это больше о производительности и названии организации. Пространства имен содержат имена (аналогичные ключам объекта, но не ключам), которые содержат значения; квалифицированное имя похоже на ns::name или на объект (не в стандарте AS3, я полагаю): ns[name] или ns.name. Имена пространств имен определяются путем помещения определений в (ns defn). Такие квалифицированные имена, как ns::id, могут быть легко оптимизированы компилятором AS3 (если это, скорее всего, компилятор байт-кода Adobe), главным образом, когда ns - это не какое-либо выражение, а прямая ссылка на определение пространства имен, как правило. Например, во время компиляции, в зависимости от случая, ns::id может просто раскрываться как ссылка на значение определения ns::id, в противном случае может развернуться только id, если это не выражение, отличное от Identifier. в нечто большее, чем Identifier, например, в байтах, иначе выражение не может быть оптимизировано. общее использование пространств имен можно наблюдать во время компиляции - если их использование не искажено, поскольку пространства имен также имеют свой собственный объект Namespace и могут быть выражены.

namespace Iterator;

Iterator class IteratorStopClass
{...};

Iterator function getValues()
{...};

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

const Iterator = {};

class IteratorStopClass
{...}

Iterator.IteratorStopClass = IteratorStopClass;

Iterator.getValues = function getValues()
{...};
0 голосов
/ 03 мая 2013

Я исследовал использование этой функции пространства имен.

Я наткнулся на другую ссылку с более подробными объяснениями с примером использования в проекте maashaack: https://code.google.com/p/maashaack/wiki/Namespace

Один из приведенных примеров:переопределение модификаторов доступа.Воспроизводится ниже:

package test
{
    public class ClassA
    {
        public function ClassA()
        {
        }

        public function test( msg:String ):void
        {
           trace( msg );
        }

        protected function trace( msg:String ):void
        {
            public::trace( "[ " + msg + " ]" );
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...