Как създавате публични константи в Haxe? Просто ми трябва аналогът на добрия стар const
в AS3:
public class Hello
{
public static const HEY:String = "hey";
}
Как създавате публични константи в Haxe? Просто ми трябва аналогът на добрия стар const
в AS3:
public class Hello
{
public static const HEY:String = "hey";
}
Обичайният начин за деклариране на константа в Haxe е използването на модификаторите static
и inline
.
class Main {
public static inline var Constant = 1;
static function main() {
trace(Constant);
trace(Test.Constant);
}
}
Ако имате група свързани константи, често има смисъл да използвате enum abstract
a>. Стойностите на резюметата на 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>
е просто абстрактен тип, който създава „изглед“ само за четене, като прави следното:
Array<T>
@:forward
, за да изложи само полета, които не променят масива, като като length
и map()
from Array<T>
Можете да видите как е внедрено тук.
За нестатични променливи и обекти можете да им дадете плитка константност, както е показано по-долу:
public var MAX_COUNT(default, never):Int = 100;
Това означава, че можете да прочетете стойността по „по подразбиране“, но не можете „никога“ да пишете в нея.
Повече информация можете да намерите http://adireddy.github.io/haxe/keywords/never-inline-keywords.