Rust: 函数
是时候介绍一下函数了。
前面我们梳理基础知识点时,都是将代码放入一个 main 函数中来演示的,一个 fn 关键字,加上一个 main 作为函数名,完事儿:
// 入口函数
fn main() {
println!("hello world");
}
如果你写过 Java 代码,就绝对能感受到 Rust 是多么的简洁。
在实际应用中,由于逻辑比较复杂,我们需要将代码拆分开,以功能为单位,封装到不同的函数中去,供外部调用。我们可以定义自己的函数,如果函数名由多个单词组成,则需要使用下划线风格:
fn test() {
println!("test");
}
fn test_function() {
println!("test_function");
}
fn main() {
test();
test_function();
}
Rust 不会限制函数定义的位置,函数可以放在哪里,这是你的自由:
// 我定义在先
fn first() {
println!("first");
}
fn main() {
first();
second();
third();
// 我定义在main函数中
fn second() {
println!("second");
}
}
// 我定义在main之后
fn third() {
println!("third");
}
函数的参数也很简单,括号内声明一个参数名,后面跟上类型即可(与变量声明不同,这里的类型不能省略):
fn main() {
show_number(3);
}
// 参数必须声明类型
fn show_number(n: i32) {
println!("the number is: {}", n);
}
类似地,我们可以在括号内声明多个参数:
fn main() {
add(3, 5);
}
// 多个参数
fn add(a: i32, b: i32) {
let sum = a + b;
println!("sum: {}", sum);
}
函数可以有返回值,只需括号后面跟上返回值的类型即可:
fn main() {
let sum = add(3, 5);
println!("sum: {}", sum);
let sum = add2(3, 6);
println!("sum: {}", sum);
}
// 返回值是i32类型
fn add(a: i32, b: i32) -> i32 {
// 表达式返回值
a + b
}
fn add2(a: i32, b: i32) -> i32 {
// return语句返回
return a + b;
}
我们可以使用一个表达式来返回结果,也可以使用 return 语句返回。Rust 推崇使用表达式,但有时候使用 return 会让代码更清晰。
函数可以绑定变量,绑定之后,变量可以作为函数来调用:
fn main() {
// 函数绑定变量
let add_fn = add;
// 调用函数
let sum = add_fn(3, 5);
println!("sum: {}", sum);
}
fn add(a: i32, b: i32) -> i32 {
a + b
}
上面在进行绑定时,没有指定类型,编译器会自动推导出函数的类型,即 fn(i32, i32) -> i32
,我们也可以显式声明函数的类型:
fn main() {
// 显式声明函数类型
let add_fn: fn(i32, i32) -> i32 = add;
let sum = add_fn(3, 5);
println!("sum: {}", sum);
}
fn add(a: i32, b: i32) -> i32 {
a + b
}
最后,函数也可以作为参数传递到其他函数中,进而在内部调用。且看下面一个购物打折的示例:
// 减10元折扣
fn discount10(total: i32) -> i32 {
total - 10
}
// 减20元折扣
fn discount20(total: i32) -> i32 {
total - 20
}
// 计算最终价格
fn calc(
discount: fn(i32) -> i32,
total: i32
) -> i32 {
// 打折后再减5元
return discount(total) - 5;
}
fn main() {
let total = 150;
// 传入 discount10 函数
let pay = calc(discount10, total);
// 打印结果 135
println!("{}", pay);
// 传入 discount20 函数
let pay = calc(discount20, total);
// 打印结果 125
println!("{}", pay);
}
以上就是函数最基本的用法,今天就先介绍到这里吧。
欢迎转载,转载请注明出处。