Почему в ActionScript нет «дженериков»? - PullRequest
23 голосов
/ 11 мая 2009

Может кто-нибудь сказать мне, почему ActionScript 3, статически типизированный язык, не имеет обобщений? Это слишком много работы? Историческая вещь? Есть ли способ «подделать» это, что я еще не подобрал?

Редактировать : большое спасибо за ответы! Класс Vector - это в основном то, что я искал, и другая информация тоже была полезна.

Ответы [ 4 ]

23 голосов
/ 11 мая 2009

Новый векторный класс - это форма обобщений, которые теперь ActionScript 3 поддерживает при компиляции для Flash Player 10. Они пока не поддерживают спецификацию ваших собственных обобщенных классов.

Я думаю, что Adobe в конечном итоге внедрит стандарт ES4. Было бы хорошо, если бы у них был конкурент, который мог бы подтолкнуть их быстрее в правильном направлении. Я ожидал немного большего от обновлений AS3, когда они перешли на CS4, но я полагаю, что революционного класса Vector будет достаточно.

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

2 голосов
/ 11 мая 2009

Я считаю, что это историческая вещь. ActionScript основан на ECMAScript (JavaScript также основан на ECMAScript). ECMAScript - это динамически типизированный язык, означающий, что переменные не имеют объявленного типа. Обобщения более полезны в статически типизированных языках, где тип переменной объявляется заранее. В статически типизированном языке, без универсальных шаблонов, вы постоянно зависаете при приведении к корневому объекту (например, Object in Java). Это не проблема в ECMAScript, потому что вы можете поместить что угодно в любую структуру данных.

Так почему же ActionScript не добавил универсальные шаблоны, когда они добавили статическую типизацию в ECMAScript? Я не могу быть уверен в этом, но я думаю, что предпосылка вашего вопроса несколько неправильна - есть контейнеры общего назначения, такие как Vector . Я мог бы подумать, что они будут хранить динамически типизированные контейнеры ECMAScript (объекты и массивы) для обратной совместимости, но они уже сломали это между AS2 и AS3, поэтому я не уверен.

2 голосов
/ 11 мая 2009

Типы параметров (слово 'generics' обычно используется в ECMAScript для универсальных методов , а не комбинация параметрических типов и полиморфизма времени выполнения, используемых в Java) были предложенными как часть ES4, но ES4 сломался, и большая часть системы типов, предложенная для ES (включая части, реализованные в ActionScript), не войдет в следующую версию. Я не могу сказать, захочет ли Adobe пойти по этому пути самостоятельно.

0 голосов
/ 11 мая 2009

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

as3 не очень отличается от javascript, кстати, так что ваш вопрос вроде бы относится и к JS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...