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