Есть ли способ заставить Flash форсировать статическую типизацию? - PullRequest
2 голосов
/ 10 декабря 2010

Есть ли способ заставить flash as3-компилятор требовать статической типизации?У меня плохая привычка не делать этого, и было бы неплохо, чтобы это вызывало ошибки компиляции.В настройках публикации для as3 я включил «строгий», но это ничего не изменило.

Ответы [ 2 ]

4 голосов
/ 10 декабря 2010

Я немного смущен. Не приводит ли это к ошибкам времени компиляции:

function enforceType(var_a:int, var_b:String) {
    trace("passed");
}

enforceType(1, 'test');
enforceType(1, 1);
enforceType('test', 1);

Это, конечно, для меня.

EDIT
Поскольку вы отредактировали свой вопрос, я отредактирую свой ответ.
AS3 IS статически типизированный IF Вы явно вводите свои переменные.

Пример:

var a:int = 0;
a = "TEST";
//  a is typed as an int, therefor when you attempt to compile the above, 
//  you will get a compile time error 
//  1067: Implicit coercion of a value of type String to an unrelated type int.

var a = 0;
a = "TEST";
//  Here, a is not typed explicitly, so you can assign whatever type you want, and
//  the compiler will not complain.

Итак, вкратце, AS3 статически типизирован, если вы хотите, чтобы это было. Невозможно заставить компилятор узнать, какой тип вы на самом деле хотели назначить, так как это статический тип во время компиляции.

Представьте, например, что вы определяете нетипизированную статическую переменную bar в классе Foo.

package 
    class Foo {
        public static var bar;
    }   
}

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

// In one handler you have
Foo.bar = 1;
// and in another handler
Foo.bar = "test";

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

Если класс Foo изменен на:

package 
    class Foo {
        public static var bar:String;
    }   
}

Тогда компилятор будет знать, что первый обработчик событий, указанный выше, не в порядке, потому что bar был статически типизирован как String.

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

Для справки .

1 голос
/ 10 декабря 2010

Я использую FlexBuilder для написания своего ActionScript.При нарушении правил строгого типа вы увидите предупреждения.Наряду с предупреждением об использовании одного и того же имени переменной в области действия, неиспользуемым импортом и так далее.Это, конечно, в сочетании со стандартными ошибками AS3.

Я не мог больше продолжать без сильной IDE.

Альтернативами FlexBuilder, которые также помогают, являются FDT и FlashDevlop.Хотя они могут не обладать всеми этими функциями

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