dynamic

Различное поведение функции при различных типах аргумента

Предположим нам необходимо различное поведение функции в зависимости от типа получаемого аргумента. Реализуется несколькими способоми. 1ый кажется самый простой для восприятия, а возможно и самый быстрый.

package ;

import flash.display.Shape;

import Type;

class Main
{
        static public function main()
        {
                f(true);
                f(12345);
                f(1.2345);
                f("abcdef");
                f(new Shape());
                f(f);
                f({name: "abcdef" } );
                f(null);
        }
       
        static public function f(value:Dynamic)
        {
                //1) Рабочий вариант на switch
                switch(Std.string(Type.typeof(value)))
                {
                        case "TBool":                           trace("I am Bool");
                        case "TInt":                            trace("I am Int");
                        case "TFloat":                          trace("I am Float");
                        case "TClass([class String])":          trace("I am String");

haXe 2.03

Опубликована новая версия haXe - 2.03

Самые важные изменения в этом релизе:

  • Теперь компилятор haXe умеет создавать SWC для Flash9 и выше.
    Подробнее об этом: http://haxe.org/doc/advanced/swc
  • Множество оптимизаций, в частности автоматическое вычисление постоянных операций
    (полезно для inline static)
  • Изменён способ выполнения операций типов Dynamic/untyped: некоторые операции теперь выполняются в Float режиме, вместо Int для предотвращения изменения значений в Flash9.

Подробнее о первых двух нововведениях создатель haXe написал в своём блоге в статье "haXe 2.03 with SWC Output".

Dynamic

Если вы хотите использовать динамическую типизизацию и освободиться от системы типов, можно использовать тип Dynamic, который может быть использован вместо любого типа данных без каких-либо проверок компилятором.

    var x : Dynamic = "";
    x = true;
    x = 1.744;
    x = new Array();
</div>

Также, Dynamic имеет бесконечное количество полей, имеющих тип Dynamic, то есть он может быть использован как массив с помощью синтаксиса с квадратными скобками и т.д.

RSS-материал