目录
思维导图
1. 函数的基本概念
Rust语言中,函数是代码中常见的构造,主要用于组织和复用代码。main
函数是大多数程序的入口点,并引入了fn
关键字用于定义新函数。
1.1 函数的定义
- 定义方式:通过
fn
关键字后接函数名和一对括号来定义函数。 - 代码示例:
fn main() { println!("Hello, world!"); another_function(); } fn your_function() { println!("Your function."); }
- 调用函数:可以在
main
函数内调用其他已定义的函数,如your_function
。
2. 参数的使用
Rust允许函数定义参数,参数是函数签名的特殊变量,允许向函数传递具体的值。
2.1 单个参数的示例
- 代码示例:
fn main() { your_function(5); } fn your_function(x: i32) { println!("The value of x is: {x}"); }
- 输出:运行后将打印
The value of x is: 5
。
2.2 多个参数的示例
- 代码示例:
fn main() { print_multiparameter(5, 'h'); } fn print_multiparameter(value: i32, unit_label: char) { println!("The result is: {value}{unit_label}"); }
- 输出:运行后将打印
The result is: 5h
。
3. 语句与表达式
Rust语言中,函数体由一系列语句组成,这些语句可以选择性地以表达式结束。
3.1 语句与表达式的区别
- 语句:执行某个操作但不返回值,例如变量声明。
- 表达式:计算并返回值,例如数学运算
5 + 6
。
3.2 示例
- 代码示例:
fn main() { let y = { let x = 3; x + 1 }; println!("The value of y is: {y}"); }
- 输出:将打印
The value of y is: 4
。
4. 带返回值的函数
函数可以返回值,返回值的类型需要在箭头->
后声明。
4.1 返回值的示例
- 代码示例:
fn num() -> i32 { 6 } fn main() { let x = num(); println!("The value of x is: {x}"); }
- 输出:运行后将打印
The value of x is: 6
。
4.2 返回值与表达式
- 重要性:函数的返回值是函数体内最后一个表达式的值。
- 示例:
fn add_one(x: i32) -> i32 { x + 1 }
- 注意:如果在返回值的表达式后加上分号,将导致错误,因为分号会将表达式变为语句,不再返回值。
5. 错误处理
若在函数中不正确地使用分号,会导致类型不匹配的错误,编译器会给出相应的错误信息以帮助调试。
5.1 错误示例
- 代码示例:
fn add_one(x: i32) -> i32 { x + 1; // 错误:这里不返回值 }
- 错误信息:编译器会提示
mismatched types,
即类型不匹配,因为函数声明期望返回i32
类型,但实际返回的是()
,即unit
类型。
tips:
- 蛇形命名法;
- 必须声明参数类型
- 有返回值时,必须是表达式。