Константи в Haxe

Как създавате публични константи в Haxe? Просто ми трябва аналогът на добрия стар const в AS3:

public class Hello
{
     public static const HEY:String = "hey";
}

person momijigari    schedule 21.08.2014    source източник


Отговори (2)


Обичайният начин за деклариране на константа в Haxe е използването на модификаторите static и inline.

class Main {
    public static inline var Constant = 1;

    static function main() {
        trace(Constant);
        trace(Test.Constant);
    }
}

Ако имате група свързани константи, често има смисъл да използвате enum abstract. Стойностите на резюметата на enum са static и inline имплицитно.


Обърнете внимание, че само основните типове (Int, Float, Bool), както и String могат да бъдат inline, за други ще се провали с тази грешка:

Инициализацията на вградената променлива трябва да бъде постоянна стойност

За щастие, Haxe 4 въведе ключова дума final, която може да бъде полезна за такива случаи:

public static final Regex = ~/regex/;

Въпреки това, final само предотвратява преназначаване, не прави типа неизменен. Така че все пак ще бъде възможно да добавяте или премахвате стойности от нещо като static final Values = [1, 2, 3];.

За конкретния случай на масиви, Haxe 4 въвежда haxe.ds.ReadOnlyArray, което позволява "постоянни" списъци (ако приемем, че не го заобикаляте с помощта на отливки или отражение):

public static final Values:haxe.ds.ReadOnlyArray<Int> = [1, 2, 3];
Values = []; // Cannot access field or identifier Values for writing
Values.push(0); // haxe.ds.ReadOnlyArray<Int> has no field push

Въпреки че това е решение, специфично за масив, същият подход може да се приложи и към други типове. ReadOnlyArray<T> е просто абстрактен тип, който създава „изглед“ само за четене, като прави следното:

Можете да видите как е внедрено тук.

person Gama11    schedule 21.08.2014

За нестатични променливи и обекти можете да им дадете плитка константност, както е показано по-долу:

public var MAX_COUNT(default, never):Int = 100;

Това означава, че можете да прочетете стойността по „по подразбиране“, но не можете „никога“ да пишете в нея.

Повече информация можете да намерите http://adireddy.github.io/haxe/keywords/never-inline-keywords.

person Adi    schedule 13.11.2014