委托绑定语句
下面的示例概述了当泛型的实例化跨越多个不同模块时会出现的一个问题:
# 模块 A
proc genericA* [T](x: T) =
mixin init
init(x)
import C
# 模块 B
proc genericB*[T](x: T) =
# 实例化 `genericB` 时,如果没有 `bind init` 语句,来自模块 C 的 init 过程就是不可用的:
bind init
genericA(x)
# 模块 C
type O = object
proc init* (x: var O) = discard
# 主模块
import B, C
genericB O()
当由实例化 genericB 引发实例化 genericA 时,模块 B 的作用域中那个来自模块 C 的 init 过程未在考虑之中。 解决方案是在 genericB 中通过 bind 语句 forward “转发” 这个符号。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .