泛型符号查找

开放和封闭的符号

泛型中的符号绑定规则比较微妙:有“开放”和“封闭”符号。 “封闭”符号不能在实例化上下文中重新绑定,“开放”符号可以。 默认重载符号是打开的,每个其他符号都是关闭的。

在两个不同的上下文中查找开放符号:定义上下文和实例化时的上下文都被考虑:

  1. type
  2. Index = distinct int
  3.  
  4. proc `==` (a, b: Index): bool {.borrow.}
  5.  
  6. var a = (0, 0.Index)
  7. var b = (0, 0.Index)
  8.  
  9. echo a == b # 可以了

在示例中,元组的通用 == (在系统模块中定义)使用元组组件的 == 运算符。 但是, Index 类型的 == 是在元组的 ==之后 定义的;然而,该示例编译为实例化也将当前定义的符号考虑在内。