# 函数与重载

函数以 `fn` 开头，参数采用 `name: Type`，返回类型写在 `->` 后面。省略返回类型的场景仍受当前类型系统限制；入门时建议显式写出。

```kelyra
fn add(a: i32, b: i32) -> i32 {
  return a + b;
}
```
## 程序入口

`@main` 可标记任意名称的无参数函数，但其返回类型必须是 `i32`。一个程序恰好需要一个入口。

## 同名函数

普通函数和方法可以同名，只要参数类型序列不同。返回类型不用于区分重载。调用时优先选择参数类型完全匹配的候选；如果多个候选仍无法区分，编译器会报歧义。

```kelyra
fn scale(value: i32) -> i32 { return value * 2; }
fn scale(value: f32) -> f32 { return value * 2.0; }
```

编译器不会在重载选择时隐式提升数值类型。构造函数重载和同名泛型函数模板仍未支持。

## 函数值

函数类型写作 `fn(i32) -> i32`。无捕获的顶层函数可作为回调传给兼容的参数，也可用于 C 函数指针互操作。
