函数在Rust中非常常见,在上一节示例中,你已经看到了Rust中程序入口函数main
函数。同时你应该也发现了关键字fn
可以用来声明函数。
Rust代码中使用蛇形命名法来对函数和变量进行命名。下面是一个例子:
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function.");
}
输入fn
后跟函数名和一对小括号,同时使用花括号标识函数的开始和结束,就可以声明一个函数。可以通过函数名加小括号的方式在程序中对函数进行调用。和C语言不同的是,Rust不要求函数的声明在调用之前。
函数参数
Rust函数可以携带参数,和其余静态类型语言一样,需要指定参数的数据类型,下面是一个例子:
fn main() {
another_function(5);
}
fn another_function(x: i32) {
println!("The value of x is: {x}");
}
函数another_function
有一个名字为x
类型为i32
的参数。传递数字5
进入该函数,println!
宏把花括号替换为5
,将结果打印在控制台。
如果需要传递多个参数,可以通过逗号将多个参数分割开,下面是一个例子:
fn main() {
print_labeled_measurement(5, 'h');
}
fn print_labeled_measurement(value: i32, unit_label: char) {
println!("The measurement is: {value}{unit_label}");
}
声明和表达式
声明是执行一系列动作,但不返回值的指令。
表达式是最终得到结果值的指令。下面是一个例子:
fn main() {
let x = 1; // 这是一个声明
let y = {
let x = 3;
x+1
};// 花括号中是一个表达式
println!("The value of y is:{y}");
}
这里需要注意的是:在Rust中表达式的最后一行如果没有分号,会将其作为表达式的返回值返回。和C语言不同的是let x=3
并不会返回3
这个值,因此let x=(let y=10);
编译无法通过。
带有返回值的函数
函数可以携带返回值,但是需要在函数小括号后使用箭头指定返回类型。下面是一个例子:
fn five() -> i32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {x}");
}
定义了一个函数名为five
的函数,函数的返回值为i32
类型,没有参数。在花括号内只有一行并且没有以分号结尾,因此函数隐式返回了5
作为该函数的返回值。除此之外我们也可以使用return
显式返回,下面是一个例子:
fn five() -> i32 {
return 5;
6
}
fn main() {
let x = five();
println!("The value of x is: {x}");
}