当使用静态宏函数(意味着用作静态扩展)时,如何限制将在自动完成列表中获得此函数的变量类型?警告:我知道我可以使用ExprOf<T>
但是如果expr
与特定摘要结合使用,我需要多种类型的内容来检查我的宏。
答案 0 :(得分:2)
除了利用类型系统自己执行统一之外,如果可能的话,您可以专门为此“过滤”使用临时抽象。
// exclusively for static extension x autocomplete
private abstract PseudoType(Dynamic)
from ActualType1
from ActualType2
from ActualType3 {}
[...]
public static macro function myMacro(value:ExprOf<PseudoType>}
{
// ExprOf doesn't do anything other than help with autocomplete
// do actual unification here
// return the appropriate result
}
[编辑]这是一个例子(live on Try Haxe/alt.):
Macro.hx
:
import haxe.macro.Expr;
private abstract PseudoType(Dynamic)
from String
from Int
from { val:Float } {}
class Macro {
public static macro function magic(value:ExprOf<PseudoType>)
{
return macro Std.string($value);
}
}
Test.hx
:
using Macro;
class Test {
static function main()
{
trace("Haxe is great!".magic());
trace(42.magic());
trace({ val : 3.14 }.magic());
}
}