我想在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);
}
}
}
目前是否可以在Haxe实现这一目标?
答案 0 :(得分:9)
您可以使用conditional compilation和Haxe Magic来实现此目的。例如:
#if java
untyped __java__("java.lang.System.out.println(toPrint);");
#elseif js
untyped __js__("alert(toPrint);");
#elseif ...
...
#end
答案 1 :(得分:5)
甚至只是使用跟踪。
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
对于每个目标,您可以使用通用haxe api以及以目标
命名的目标特定库“http://haxe.org/api
我对Stackoverflow的第一个回复很抱歉,如果它有点冗长:)也是我无法发布正确链接(限于两个)的原因。
答案 2 :(得分:2)
很抱歉,你为什么要表现出无条件的方式?
您可以拥有完全输入和自动填写的代码
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
}
}