定义一个两数相加的函数:
fn add(a: u8, b: u8) {
let sum = a + b;
println!("sum is {}", sum)
}
如果你没有为变量声明类型,它们将设置为你第一次使用的函数的参数类型。
默认情况下整数的推断类型为 i32
。
let y = 12;
let z = 34;
add(y, z);
因为使用了 add 函数,y 和 z 将被推断为 u8
类型。如果再将 y 或者 z 传入其他类型参数的函数中会触发程序 panic。
fn guess_number(number: i32) {
println!("Indeed, {} is the correct answer", number)
}
guess_number(z); // 需要 i32 而传入了 u8
需要显式类型转换:
guess_number(y as i32);
函数返回类型
// 接受一个 i32 类型的参数,返回一个 i32 类型的值
fn square(number: i32) -> i32 {
number * number
// 返回值的表达式
// 等效于 return number * number
}
使用元组返回多个值:
fn triple(number: i32) -> (i32, i32) {
let input = number;
let result = number * 3;
(input, result)
}
没有返回值,指定返回值为 () 是可选的。
fn does_not_return() -> () {
println!("ain't returning nuthing!")
}
闭包
闭包大多是可以访问封闭环境中的变量的匿名函数。
let double = |n1: u8| -> u8 { n1 * 2 };
println!("{}", double(11)); // 22
let triple = |n1| n1 * 3;
println!("{}", triple(99)); // 297
作用域
fn main() {
let planet = "Dunya";
if true {
let planet = "Jupiter";
println!("planet is {}", planet); // planet is Jupiter
}
println!("planet is {}", planet); // planet is Dunya
}