形参

形参在过程体中不可改变。默认地,它们的值不能被改变,这允许编译器以最高效的方式实现参数传递。如果在一个过程内需要可以改变的变量,它必须在过程体中用 var 声明。 遮蔽形参名是可能的,实际上是一个习语:

  1. proc printSeq(s: seq, nprinted: int = -1) =
  2. var nprinted = if nprinted == -1: s.len else: min(nprinted, s.len)
  3. for i in 0 .. <nprinted:
  4. echo s[i]

如果过程需要为调用者修改实参,可以用 var 参数:

  1. proc divmod(a, b: int; res, remainder: var int) =
  2. res = a div b # 整除
  3. remainder = a mod b # 整数取模操作
  4.  
  5. var
  6. x, y: int
  7. divmod(8, 5, x, y) # 修改x和y
  8. echo x
  9. echo y

示例中, resremaindervar parameters 。Var参数可以被过程修改,改变对调用者可见。注意上面的示例用一个元组作为返回类型而不是var参数会更好。