当用作多种类型的静态扩展时限制宏函数的自动完成

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());
  }
}