Function

使用 fn 声明函数,snake case 命名

fn main() {
    println!("Hello, world!");

    another_function();
}

fn another_function() {
    println!("Another function.");
}

声明带参数的函数

#![allow(unused)]
fn main() {
fn print_labeled_measurement(value: i32, unit_label: char) {
    println!("The measurement is: {value}{unit_label}");
}
}

Statements and Expressions 语句和表达式

rust 是基于表达式的语言

  • 语句 Statements 是执行某些操作而不返回值的指令
  • 表达式 Expressions 是计算并返回值的代码
fn main() {
    let y = 6;
}

let y = 6; 是一个语句,整个函数也是语句。表达式可以是语句的一部分,let y = 6;其中的6是一个表达式 调用函数和宏 macro是表达式

fn main() {
    let y = {
        let x = 3;
        x + 1
    };

    println!("The value of y is: {y}");
}

一个由 {}构成的语句块是表达式。表达式不需要句末的 ;,如语句块的第二行 x+1,加上 ;会变成语句

带返回值的函数

无返回值时隐式返回空元组()unit

声明带返回值的函数

#![allow(unused)]
fn main() {
fn 函数名(参数列表) -> 返回值类型 { 
    函数体 
}
}

rust 的函数返回值和函数体的最后表达式的值相同,大多数函数隐式的返回最后表达式的值,当然也可以显式的使用 return返回

fn five() -> i32 {
    5
}

fn main() {
    let x = five();

    println!("The value of x is: {x}");
}

如上述five函数的5这行末尾没加;,隐式的返回5为函数返回值。若加上;,则5变成了语句,five函数隐式返回空tuple ()unit,和函数指定的i32不匹配,就会报编译错误error[E0308]: mismatched types

通过元组返回多个值

fn main() {
    let s1 = String::from("hello");

    let (s2, len) = calculate_length(s1);

    println!("The length of '{s2}' is {len}.");
}

fn calculate_length(s: String) -> (String, usize) {
    let length = s.len(); // len() returns the length of a String

    (s, length)
}