泛型符号查找
开放和封闭的符号
泛型中的符号绑定规则比较微妙:有“开放”和“封闭”符号。 “封闭”符号不能在实例化上下文中重新绑定,“开放”符号可以。 默认重载符号是打开的,每个其他符号都是关闭的。
在两个不同的上下文中查找开放符号:定义上下文和实例化时的上下文都被考虑:
- type
- Index = distinct int
- proc `==` (a, b: Index): bool {.borrow.}
- var a = (0, 0.Index)
- var b = (0, 0.Index)
- echo a == b # 可以了
在示例中,元组的通用 == (在系统模块中定义)使用元组组件的 == 运算符。 但是, Index 类型的 == 是在元组的 ==之后 定义的;然而,该示例编译为实例化也将当前定义的符号考虑在内。