模板形参查询规则

模板中的参数 p 甚至在表达式 x.p 中被替换。 因此,模板参数可以用作字段名称,也可以使用相同的参数名称对限定的全局符号进行隐藏:

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

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

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