定义一个两数相加的函数:

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
}