函数

函数 属于 Rust

1 个练习

关于 函数

函数是一段代码,其中包含一个或多个语句或表达式。函数可以选择性地返回一个值。

Rust 的风格是对函数名使用蛇形命名法,定义函数时要在这个名字前面加上fn关键字。例如

fn do_nothing() {}

圆括号括起零个或多个形参,形参之间以逗号分隔。形参是对某个特定类型的值的绑定,该值会被传入函数。即使没有形参,函数定义中的圆括号也不能省略。实际传给形参的值称为实参。

形参和返回值合在一起称为函数的签名。函数签名要求每个形参都必须标注类型。

大括号括起函数体:其中的语句和表达式。即使函数中不包含任何语句或表达式,函数定义里的大括号也不能省略。

在下面的例子中,函数接收一个类型为i32的形参,把它绑定到名字value,然后打印出来。

fn print_integer(value: i32) {
    println!("{value:?}");
}

注意形参的定义方式。每个形参都按name: Type的格式定义。

函数还可以返回值。默认情况下,会返回最后一个表达式的输出。在下面的例子中,函数有一个i32形参,并返回它的两倍。

fn double_integer(value: i32) -> i32 {
    value * 2
}

-> i32表示函数返回i32。与形参不同,返回值没有名字。

可以用return关键字提前退出函数,像这样:

fn long_function() -> i32 {
    let some_condition = false;
    // code snipped
    if (some_condition) {
        return 0;
    }
    // more code snipped
    42
}

const fn用来定义常量函数,常量函数可以在编译期求值。

const fn compute_data_checksum() -> u128 {
  const DATA: &[u8] = include_bytes!("my_big_data_file");
  // checksum implementation is left as an exercise for the reader
}

/// This checksum is used to validate that the user has not tampered with proprietary configuration.
pub const DATA_CHECKSUM: u128 = compute_data_checksum();

由于常量函数可能在编译期求值,它们有一些普通函数没有的限制。特别是,const fn只能调用同样标记为const的其他函数。违反这一限制会导致编译错误。

const fn multiply_integer(value: i32) -> i32 {
    use std::time::SystemTime;
    if SystemTime::now().elapsed().unwrap().as_nanos() == 0 { // this line errors
        value * 2
    } else {
        value * 3
    }
}

还有匿名函数,它们会在closures主题中介绍。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开