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

标签 autocomplete macros expression haxe using

当使用静态宏函数时,打算用作静态扩展,我如何限制将在自动完成列表中获取此函数的变量类型?警告:我知道我可以使用 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/

相关文章:

.net - 如何将 linq 查询转换为人类可读的字符串

php - 在 PHP 中使用此正则表达式时遇到问题

javascript - 搜索图标未出现在自动完成搜索中

vba - 使用 VBA 在 Excel 中删除损坏的命名范围

macros - 当我定义一个宏并且只使用一个足够罕见的名称作为临时变量时,会出现什么问题?

emacs - elisp 表达式 (1+ (buffer-size)) 和 (+ 1 (buffer-size)) 是什么意思?

java - 链接到 scala 时,eclipse 显示参数名称 arg0、arg1、arg2… 用于方法?

java - AutoCompleteTextView 搜索单词的一部分而不是整个单词

linux - 如何覆盖现有的 zsh 键盘补全?

c++ - 两层在 VS 2008 中调用 __VA_ARGS__ 失败