模板参数的查找规则

模板中的参数 p 总是会被替换,即使是像 x.p 这样的表达式。因此,模板参数可当作字段名称使用,而且一个全局符号会被同名参数所覆盖,即便使用了完全限定也会覆盖:

  1. # 模块 'm'
  2. type
  3. Lev = enum
  4. levA, levB
  5. var abclev = levB
  6. template tstLev(abclev: Lev) =
  7. echo abclev, " ", m.abclev
  8. tstLev(levA)
  9. # 输出: 'levA levA'

但是全局符号可以通过 bind 语句适时捕获:

  1. # 模块 'm'
  2. type
  3. Lev = enum
  4. levA, levB
  5. var abclev = levB
  6. template tstLev(abclev: Lev) =
  7. bind m.abclev
  8. echo abclev, " ", m.abclev
  9. tstLev(levA)
  10. # 输出: 'levA levB'