• 泛型符号查找
    • 开放和封闭的符号

    泛型符号查找

    开放和封闭的符号

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

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

    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 类型的 == 是在元组的 ==之后 定义的;然而,该示例编译为实例化也将当前定义的符号考虑在内。