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

时间:2017-09-17 20:52:48

标签: autocomplete macros expression haxe using

当使用静态宏函数(意味着用作静态扩展)时,如何限制将在自动完成列表中获得此函数的变量类型?警告:我知道我可以使用ExprOf<T>但是如果expr与特定摘要结合使用,我需要多种类型的内容来检查我的宏。

1 个答案:

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