Rust中定义函数
Rust中使用fn关键字定义函数,定义函数时需指定参数的数据类型,如果有返回值,则需要指明返回值的数据类型。
fn关键字、函数名、函数参数及其类型、返回值类型组成函数签名。例如fn fname(a: i32, b: i32)->i32是一个函数签名。
定义函数参见如下几个简单的示例:
// 没有参数、没有返回值
fn f0(){
println!("first function_0");
println!("first function_1");
}
// 有参数,没有返回值
fn f1(a: i32, b: i32) {
println!("a: {}, b: {}", a, b);
}
// 有参数,有返回值
fn f2(a: i32, b: i32) -> i32 {
return a + b;
}
// 调用函数
fn main(){
f0();
f1(1,2);
f2(3,4);
}
函数也可以直接定义在函数内部。例如在函数a中定义函数b,这样函数b就只能在函数a中访问或调用:
fn f0(){
println!("first function_0");
println!("first function_1");
fn f1(a: i32, b: i32) {
println!("a: {}, b: {}", a, b);
}
f1(2,3);
}
fn main(){
f0();
}
Rust有两种方式指定函数返回值:
- 使用return来指定返回值,此时return后要加上分号结尾,使得return成为一个语句
- return关键字不指定返回值时,默认返回
()
- return关键字不指定返回值时,默认返回
- 不使用return,将返回最后一条执行的表达式计算结果,该表达式尾部不能带分号
- 不使用return,但如果最后一条执行的是一个分号结尾的语句,则返回
()
- 不使用return,但如果最后一条执行的是一个分号结尾的语句,则返回
参考如下函数定义:
#![allow(unused)]
fn main() {
fn f0(a: i32) -> i32{
if a > 0 {
// 使用return来返回,结尾处必须不能缺少分号
return a * 2;
}
// 最后执行的一条代码,使用表达式的结果作为函数返回值
// 结尾必须不能带分号
a * 2
}
}