Var 参数
参数的类型可以使用 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) # modifies x and y
assert x == 1
assert y == 3
在示例中, res 和 remainder 是 var parameters 。可以通过过程修改 Var 形参,且调用者可以拿到更改。 传递给 var 形参的实参必须是左值。 Var 形参的实现为隐藏指针。上面的例子相当于:
proc divmod(a, b: int; res, remainder: ptr int) =
res[] = a div b
remainder[] = a mod b
var
x, y: int
divmod(8, 5, addr(x), addr(y))
assert x == 1
assert y == 3
在示例中,var 形参或指针用来提供两个返回值。这可以通过返回一个元组这种更简洁的方式来完成:
proc divmod(a, b: int): tuple[res, remainder: int] =
(a div b, a mod b)
var t = divmod(8, 5)
assert t.res == 1
assert t.remainder == 3
可以使用 tuple unpacking 来访问元组的字段:
var (x, y) = divmod(8, 5) # 元组解包
assert x == 1
assert y == 3
注意: 对于高效的参数传递来说, var 形参不是必需的。 因为非 var 形参不能修改,所以编译器在认为可以加快执行速度的情况下,会更自由地通过引用传递参数。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .