可变参数
varargs 参数是一个开放数组参数,它允许将可变数量的参数传递给过程。编译器隐式地将参数列表转换为数组:
proc myWriteln(f: File, a: varargs[string]) =
for s in items(a):
write(f, s)
write(f, "\n")
myWriteln(stdout, "abc", "def", "xyz")
# 转换成:
myWriteln(stdout, ["abc", "def", "xyz"])
仅当 varargs 参数是最后一个参数时,才会执行此转换。在这种情况下也可以执行类型转换::
proc myWriteln(f: File, a: varargs[string, `$`]) =
for s in items(a):
write(f, s)
write(f, "\n")
myWriteln(stdout, 123, "abc", 4.0)
# 转换成:
myWriteln(stdout, [$123, $"abc", $4.0])
在这个例子中, $ 应用于传递给参数 a 的任意参数。 (注意 $ 对字符串是一个空操作。)
请注意,传递给 varargs 形参的显式数组构造器不会隐式地构造另一个隐式数组:
proc takeV[T](a: varargs[T]) = discard
takeV([123, 2, 1]) # takeV 的 T 是 "int" , 不是 "int 数组"
varargs[typed] 被特别对待: 它匹配任意类型参数的变量列表,但 始终 构造一个隐式数组。这是必需的,只有这样,内置的 echo 过程才能够执行预期的操作:
proc echo* (x: varargs[typed, `$`]) {...}
echo @[1, 2, 3]
# 输出 "@[1, 2, 3]" 而不是 "123"
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .