В Haxe, какъв е правилният начин за позоваване на дефиниране с точка?
Например, за библиотеката thx.core
, как да напиша условна компилация срещу името на библиотеката?
#if thx.core
#end
Освен това, има ли общи правила за специални знаци?
В Haxe, какъв е правилният начин за позоваване на дефиниране с точка?
Например, за библиотеката thx.core
, как да напиша условна компилация срещу името на библиотеката?
#if thx.core
#end
Освен това, има ли общи правила за специални знаци?
Синтаксисът #if flag
изглежда не обработва точки. Въпреки това, Compiler.getDefine()
обработва повечето знаци, включително точката:
hxml/build команда: -D é'"(-è_.çà)=test
#if "é'\"(-è_çà)"
trace('will always be called, even without the -D');
#end
trace(haxe.macro.Compiler.getDefine("é'\"(-è_.çà)")); // test
Има заобиколно решение за точки с макроси за инициализация, дори и да не е наистина красиво:
build.hxml
-x Main.hx
-D abc.def
--macro Macro.parseDefines()
Macro.hx
import haxe.macro.Compiler;
class Macro {
public static macro function parseDefines():Void {
if (Compiler.getDefine("abc.def") != null) {
Compiler.define("abc_def");
}
}
}
Main.hx
class Main {
public static function main() {
#if abc_def
trace("abc.def is defined!");
#end
}
}
#if "whatever_string"
винаги е вярно, дори да няма -D whatever_string
- person KevinResoL; 08.11.2017
#if flag
. Редактирах отговора си със заобиколно решение.
- person kLabz; 08.11.2017
Спочвайки с Haxe 4.0.0-rc.2, дефинициите с точка са разрешени в #if
стига да са заобиколени от скоби:
#if (thx.core)
#end
#if thx.core
без скоби вероятно също ще работи в бъдеще.
В случай на thx.core
, можете да използвате thx_core
(с долна черта):
#if thx_core
#end
Доколкото знам, няма обща поддръжка за специални символи, различни от тирета (те се превеждат в долни черти от компилатора).
Библиотеката thx.core
дефинира самата -D thx_core
, използвайки поддръжка за extraParams.hxml
.