形参
形参在过程体中不可改变。默认地,它们的值不能被改变,这允许编译器以最高效的方式实现参数传递。如果在一个过程内需要可以改变的变量,它必须在过程体中用 var 声明。 遮蔽形参名是可能的,实际上是一个习语:
- proc printSeq(s: seq, nprinted: int = -1) =
- var nprinted = if nprinted == -1: s.len else: min(nprinted, s.len)
- for i in 0 .. <nprinted:
- echo s[i]
如果过程需要为调用者修改实参,可以用 var 参数:
- proc divmod(a, b: int; res, remainder: var int) =
- res = a div b # 整除
- remainder = a mod b # 整数取模操作
- var
- x, y: int
- divmod(8, 5, x, y) # 修改x和y
- echo x
- echo y
示例中, res 和 remainder 是 var parameters 。Var参数可以被过程修改,改变对调用者可见。注意上面的示例用一个元组作为返回类型而不是var参数会更好。