当使用静态宏函数时,打算用作静态扩展,我如何限制将在自动完成列表中获取此函数的变量类型?警告:我知道我可以使用 ExprOf<T>
但是如果expr
,我需要它用于多种类型以检查我的宏内部与特定的摘要相统一。
最佳答案
除了利用类型系统自行执行统一之外,如果可能的话,您还可以使用专门用于此“过滤”的临时抽象。
// 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.):
宏.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);
}
}
测试.hx
:
using Macro;
class Test {
static function main()
{
trace("Haxe is great!".magic());
trace(42.magic());
trace({ val : 3.14 }.magic());
}
}
关于autocomplete - 当用作多种类型的静态扩展时限制宏函数的自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268785/