ActionScript - Разница между «подстановочными знаками» и типами объектов? - PullRequest
2 голосов
/ 20 сентября 2010

Когда объявляется переменная с открытым типом данных, есть ли разница, особенно разница в производительности, между введением переменной в качестве «подстановочного знака» (я не уверен в официальном названии для этого) и введением переменной какОбъект?

var myVar:*;

var myVar:Object;

Ответы [ 3 ]

2 голосов
/ 20 сентября 2010

Это не повлияет на производительность. Я использую *, когда я не знаю, какой тип объекта будет до времени выполнения.

Из Livingocs: используйте * при следующих обстоятельствах:

  • Если вы хотите отложить проверку типов до времени выполнения. Вы можете использовать нетипизированное свойство или выражение для обойти проверку типов во время компиляции в строгом режиме. Обратите внимание, однако, что проверка типа во время выполнения присваивания заявления происходит ли вы используете строгий режим или нет.
  • Когда вы хотите сохранить неопределенное значение в свойстве. В отличие от предыдущие версии ActionScript, Значение undefined не является членом Тип данных объекта. Вы должны использовать нетипизированное свойство для хранения значения не определено.
1 голос
/ 20 сентября 2010

Все типы переменных и классов в ActionScript 3 являются дочерними классами Object, поэтому с точки зрения функциональности я не думаю, что между ними есть какая-либо разница.

Некоторые подклассы Object как int и Number ведут себя как объекты стека (это означает, что var firstInt:int = 5 и var secondInt:int = 5 фактически указывают на одно и то же Object), но это не влияет на то, как они обрабатываются, когда вы указываете на нихиспользуя обобщенную переменную.

Если бы я мог подвергнуть сомнению предположение, я бы сказал, что они добавили подстановочный знак как способ сохранить типизацию и упростить для мигрантов C / C ++, которые привыкли ссылаться на обобщенные типыс указателем void*, а не с базовым типом Object.

0 голосов
/ 25 ноября 2013

Вы можете использовать оба типа одинаково.Между ними есть несколько отличий.Типы подстановочных знаков имеют дополнительное значение: undefined .

var a: Object;
var b: *;
var c: *;

trace(a + ": " + getQualifiedClassName(a) + "       " + b + ": " + getQualifiedClassName(b) + "       " + c + ": " + getQualifiedClassName(c));

b = a;
a = c;

if (a == undefined)
    trace("compiles with a warning");
...