重载歧义消除
对于例程调用,会进行 “重载解析” 。有一种较弱的重载解析形式,称为 overload disambiguation 重载歧义消除 ,当重载符号在有额外类型信息的情况下被使用时,会执行。假设 p 是一个重载符号。则上下文是:
- 当 q 的相应形式参数是 proc 类型时,在函数调用 q(…, p, …) 中。 如果 q 本身被重载,则必须考虑 q 和 p 的每种解释的笛卡尔积。
- 在一个对象构造函数中 Obj(…, field: p, …) 当 field 是 proc 类型。类似的规则也适用于 array/set/tuple 的构造器。
- 有这样的声明 x: T = p 当 T 是 proc 类型。
通常情况下,有歧义的匹配会产生编译错误。
命名参数重载
如果形参的名称不同,则可以分别调用具有相同类型签名的例程。
proc foo(x: int) =
echo "Using x: ", x
proc foo(y: int) =
echo "Using y: ", y
foo(x = 2) # Using x: 2
foo(y = 2) # Using y: 2
在这种情况下不提供参数名称会导致歧义错误。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .