• 求值顺序

    求值顺序

    求值顺序是从左到右、从内到外,和大多数其他典型的命令式编程语言一样:

    1. var s = ""
    2.  
    3. proc p(arg: int): int =
    4. s.add $arg
    5. result = arg
    6.  
    7. discard p(p(1) + p(2))
    8.  
    9. doAssert s == "123"

    赋值也不例外,左侧表达式在右侧之前进行求值:

    1. var v = 0
    2. proc getI(): int =
    3. result = v
    4. inc v
    5.  
    6. var a, b: array[0..2, int]
    7.  
    8. proc someCopy(a: var int; b: int) = a = b
    9.  
    10. a[getI()] = getI()
    11.  
    12. doAssert a == [1, 0, 0]
    13.  
    14. v = 0
    15. someCopy(b[getI()], getI())
    16.  
    17. doAssert b == [1, 0, 0]

    基本原理:与重载赋值或赋值类操作的一致性 a = b 可以读作 performSomeCopy(a, b).