跳转至

函数

1. 函数声明

// 声明一个函数
fn 函数名[捕获列表](参数列表) -> 返回类型;
  • 使用 fn 关键字声明函数。
  • 函数名:函数的标识符,用于在程序中调用该函数。
  • 捕获列表:可选项,指定函数中使用的外部变量的捕获方式。
  • 参数列表:可选项,包含函数的输入参数列表。
  • 返回类型:可选项,指定函数返回值的类型。

2. 函数定义

// 定义一个函数
fn 函数名[捕获列表](参数列表) -> 返回类型 {函数体}
  • 使用 fn 关键字定义函数。
  • 函数名、捕获列表、参数列表和返回类型的含义同函数声明。
  • 函数体:包含了函数的实际实现代码。

3. 单语句函数定义

// 定义一个单语句的函数
fn 函数名[捕获列表](参数列表) = 表达式;
  • 适用于只包含一条语句的函数,可以将函数体直接定义为一个表达式。
  • 表达式的计算结果将作为函数的返回值。

4. Lambda 表达式

// 定义一个 lambda 表达式
fn [捕获列表](参数列表) -> 返回类型 {函数体}
  • 可以直接定义匿名函数,称为 Lambda 表达式。
  • 不需要指定函数名,直接使用捕获列表、参数列表、返回类型和函数体定义 Lambda 函数。

5. 返回类型推断

  • 当函数体中所有 return 处的类型一致时,可以省略返回类型。
  • 若函数体中没有 return 语句,则返回类型推断为 void

6. 捕获列表

  • 捕获列表用于指定函数中引用外部变量的方式。
  • 可以省略捕获列表,默认为引用捕获所有外部变量。
  • 支持引用捕获和值捕获两种方式。

7. 参数列表

  • 参数列表用于指定函数的输入参数。
  • 可以省略参数列表,表示函数没有参数。
  • 当函数没有参数时,参数列表可以是 (),但不能像 C 语言那样写作 (void)

示例

fn add(int a, int b) {
  return a + b;
}

fn main {
  return add(1, -1);
}

以上是 Lumos 函数的基本规范,可以根据需要在函数声明和定义时灵活使用各种选项。