当用作多种类型的静态扩展时限制宏函数的自动完成
Limit autocompletion of macro function when used as a static extension to multiple types
当使用静态宏函数时,打算用作静态扩展,我如何限制将在自动完成列表中获取此函数的变量类型?警告:我知道我可以使用 ExprOf<T>
但如果 expr
与特定摘要统一,我需要它用于多种类型以检查我的宏内部。
除了利用类型系统自行执行统一之外,如果可能的话,您还可以专门为此 "filtering".
使用临时抽象。
// 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());
}
}
当使用静态宏函数时,打算用作静态扩展,我如何限制将在自动完成列表中获取此函数的变量类型?警告:我知道我可以使用 ExprOf<T>
但如果 expr
与特定摘要统一,我需要它用于多种类型以检查我的宏内部。
除了利用类型系统自行执行统一之外,如果可能的话,您还可以专门为此 "filtering".
使用临时抽象。// 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());
}
}