Haxe определя с точка

В Haxe, какъв е правилният начин за позоваване на дефиниране с точка?

Например, за библиотеката thx.core, как да напиша условна компилация срещу името на библиотеката?

#if thx.core

#end

Освен това, има ли общи правила за специални знаци?


person KevinResoL    schedule 08.11.2017    source източник


Отговори (3)


Синтаксисът #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
    }
}
person kLabz    schedule 08.11.2017
comment
#if "whatever_string" винаги е вярно, дори да няма -D whatever_string - person KevinResoL; 08.11.2017
comment
Прав си, не тествах правилно със синтаксиса #if flag. Редактирах отговора си със заобиколно решение. - person kLabz; 08.11.2017

Спочвайки с Haxe 4.0.0-rc.2, дефинициите с точка са разрешени в #if стига да са заобиколени от скоби:

#if (thx.core)

#end

#if thx.core без скоби вероятно също ще работи в бъдеще.

person Gama11    schedule 25.03.2019

В случай на thx.core, можете да използвате thx_core (с долна черта):

#if thx_core

#end

Доколкото знам, няма обща поддръжка за специални символи, различни от тирета (те се превеждат в долни черти от компилатора).

Библиотеката thx.core дефинира самата -D thx_core, използвайки поддръжка за extraParams.hxml.

person Jonas Malaco    schedule 08.11.2017