关于java:在Haxe中检测目标语言

Detect target language in Haxe

我想检测Haxe中的目标语言,以便可以根据Haxe编译成的语言来更改函数的行为。

类似Haxe的伪代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
class Test() {
static function printStuff(toPrint) {
    if (the target language is Java) {
        System.out.println(toPrint);
    } else if (the target language is C++) {
        cout << toPrint;
    } else if (the target language is JavaScript) {
        alert(toPrint);
    }

}
}

目前可以在Haxe中实现这一目标吗?


您可以将条件编译与Haxe Magic一起使用以实现此目的。例如:

1
2
3
4
5
6
7
#if java
    untyped __java__("java.lang.System.out.println(toPrint);");
#elseif js
    untyped __js__("alert(toPrint);");
#elseif ...
    ...
#end


甚至只是使用跟踪。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Test()
{
   static function main()
   {
       #if java
           var language = 'java';
        #elseif js
            var language = 'js';
        #elseif cs
            var language = 'csharp';
        #elseif php
            var language = 'PHP'
        #elseif (flash||flash8)
            var language = 'flash';
        #elseif cpp
            var language = 'c++';
        #elseif neko
            var language = 'neko';
        #elseif tamarin
            var language = 'tamarin';
        #end
        trace( language );
    }  
}

但是应该注意的是,用于编译此文件的hxml需要在理论上指定每个目标,这将是通用的……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-java java
-main Test
--next
-js test.js
-main Test
--next
-cs cs
-main Test
--next
-php www
-main Test
--next
-swf test8.swf
-swf-version 8
-main Test
--next
-swf test.swf
-swf-version 9
-main Test
--next
-neko neko
--main Test

但实际上,您可能希望添加其他编译器标志,甚至使用-cmd实际运行示例。

一系列目标入门...

'http://haxe.org/doc/start/

条件编译

'http://haxe.org/ref/conditionals

编译器标志和选项,尽管我可能错过了链接。

'http://haxe.org/manual/tips_and_tricks
'http://haxe.org/doc/compiler

然后瞄准魔法

'http://haxe.org/doc/advanced/magic

对于每个目标,您可以使用通用haxe api以及以目标命名的目标特定库

'http://haxe.org/api

我对Stackoverflow的第一个答复很抱歉,如果它有点冗长:)也是我无法发布适当链接(限制为两个)的原因。


抱歉,您为什么要显示未键入的方式?

您可以输入完整且自动完成的代码

1
2
3
4
5
6
7
8
9
10
11
class Test() {
    static function printStuff(toPrint) {
        #if java
            java.lang.System.out.println(toPrint);
        #elseif js
            js.Lib.alert(toPrint);
        #elseif cpp
            cpp.Lib.print(toPrint);
        #end
    }
}