跳转至

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: 重定义

对于重载函数的搜索条件按顺序遵循以下几条规则:

  1. 参数数量相同。
  2. 优先完全匹配
  3. 优先无损转换
  4. 有损转换 (警告)

相关内容:函数与纯度见 函数与纯度