Haxe 用点定义

Haxe defines with dot

在 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
    }
}

thx.core的情况下,可以使用thx_core(带下划线):

#if thx_core

#end

据我所知,除了连字符 (those get translated into underscores by the compiler) 之外,没有对特殊字符的一般支持。

thx.coredefines -D thx_core itself, using haxelib's support for extraParams.hxml

Starting with Haxe 4.0.0-rc.2,在 #if 中允许使用点定义,只要它们被括号括起来:

#if (thx.core)

#end

#if thx.core 没有括号 will likely also work in the future.