Overload / 函数重载¶
规则¶
在 Lumos 中,默认情况下函数是不可重载的。如果需要在同一作用域内定义同名函数,所有参与重载的函数变体都必须显式地标记 ovl 关键字。
如果一个函数未标记 ovl,它将独占该函数名,任何后续尝试使用相同名称(无论是否标记 ovl)的操作都会导致编译错误。
标记为 ovl 的函数在进行 名称重整 时会使用特殊的实体标识 O(而非普通的 F),以便链接器和解析工具识别其重载身份。
ovl def foo(i32 a) -> unit;
ovl def foo(f32 a) -> unit; // OK: 所有参与者都标记了 ovl
def bar(i32 a) -> unit;
// ovl def bar(f32 a) -> unit; // Error: 第一个定义没有标记 ovl,拒绝重载
// def bar(f32 a) -> unit; // Error: 重定义
对于重载函数的搜索条件按顺序遵循以下几条规则:
- 参数数量相同。
- 优先完全匹配
- 优先无损转换
- 有损转换 (警告)
相关内容:函数与纯度见 函数与纯度。