泛型中的符号查找
开放和封闭符号
泛型中的符号绑定规则略显微妙: 存在开放和封闭两种符号。 封闭的符号在实例化的上下文中无法被重新绑定,而开放的符号则可以。 默认情况下,重载符号都是开放的,所有其他符号都是封闭的。
会在两种不同的上下文中查找开放的符号: 一是其定义所处的上下文,二是实例化时的上下文:
type
Index = distinct int
proc `==` (a, b: Index): bool {.borrow.}
var a = (0, 0.Index)
var b = (0, 0.Index)
echo a == b # 可以!
在这个例子中,针对元组的泛型 \== (定义于 system 模块) 建立在元组各字段的 \== 运算之上。 然而,针对 Index 类型的 \== 定义发生泛型 \== 定义 之后; 这个例子可以编译,因为实例化关于元组的 \== 时,当前定义的关于 Index 的 \== 也会考虑进来。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .