Расширения (
extensions) могут использоваться для расширения либо определения анонимного типа (typedef), либо для расширения типа "на лету".
Вот пример расширения определения анонимного типа:
typedef Point = {
var x : Int;
var y : Int;
}
<em> определяем 'p' как Point с дополнительным полем z
var p : {> Point, z : Int }
p = { x : 0, y : 0, z : 0 }; // работает
p = { x : 0, y : 0 }; // не работает
Для классов, поскольку они не определяют типов, необходимо cast во время присвоения. Это небезопасно, так что будьте осторожны.
var p : {> flash.MovieClip, tf : flash.TextField };
p = flash.Lib._root; // ошибка
p = cast flash.Lib._root; // работает, но без контроля типов !
Расширения можно также использовать для создания каскадных определений//:
typedef Point = {
var x : Int;
var y : Int;
}
typedef Point3D = {> Point,
var z : Int;
}
В этом случае, каждый Point3D будет также и Point.
Комментарии
signature Point { var
signature Point {
var x : Int;
var y : Int;
}
это удивило, ключевое слово "signature" раньше не упоминалось.
у Николаса в той же статье (и в старой, и в новой версии документации):
typedef Point = {
var x : Int;
var y : Int;
}
очевидно здесь ошибка
исправил. спасибо!
да, была ошибка, это наверное осталось ещё с совсем старой версии, до того как typedef появился.
а вообще такие вещи можно всем исправлять, если есть уверенность.
новая версия создаётся, к старой можно вернуться, если что, и к ней можно добавить коммент, что именно исправлено, также как это обычно делается в вики. по крайней мере этот функционал должен работать )
Отправить комментарий