Java 在Haxe中检测目标语言

Java 在Haxe中检测目标语言,java,javascript,c++,haxe,Java,Javascript,C++,Haxe,我想检测Haxe中的目标语言,以便根据Haxe编译到的语言更改函数的行为 类Haxe伪代码中的示例: class Test() { static function printStuff(toPrint) { if (the target language is Java) { System.out.println(toPrint); } else if (the target language is C++) { cout << toP

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

类Haxe伪代码中的示例:

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);
    }

}
}
类测试(){
静态函数printStuff(TopPrint){
if(目标语言是Java){
系统输出打印项次(toPrint);
}else if(目标语言为C++){
cout您可以与一起使用来实现此目的。例如:

#if java
    untyped __java__("java.lang.System.out.println(toPrint);");
#elseif js
    untyped __js__("alert(toPrint);");
#elseif ...
    ...
#end

对不起,你为什么要用非类型化的方式

您可以有一个完全键入并自动完成的代码

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

甚至只是使用跟踪

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需要在理论上指定每个目标—它将是类似于

-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

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

"http://haxe.org/api


我的第一个关于Stackoverflow的回复很抱歉,如果有点冗长:)也是我无法发布正确链接的原因(限于两个)

这看起来很有趣。我已经开始学习HAXE编程语言。它应该由任何HAXE编译器后端支持。每个后端都可以决定用于条件编译的宏;它不是HAXE语言本身指定的。例如,C++可能使用CPP,但是它也可以使用<代码>。> CPLUS PLUS <代码> >为HAXE提供C++后端的项目可以选择。那么,你如何将我的伪代码示例翻译成真正的HAXE代码?嗯……我在回答中这样做了):注意,我省略了C++部分,因为我不知道编译C++时定义了什么宏,因为C++不是我所能支持的官方语言。这一部分留给读者作为练习,“为什么不简单地使用trace(toPrint),它适用于所有目标语言?”?