• 模板形参查询规则

    模板形参查询规则

    模板中的参数 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'