Rust 圣经 阅读 函数

函数要点

  • 函数名和变量名使用 蛇形命名法(snake case),例如 fn add_two() -> () {}
  • 函数可以放在任何位置。
  • 每个函数参数都需要标注类型。

函数参数

Rust 是强类型语言,因此需要为每个函数参数都标识出它的具体类型。

缺少任何一个参数的类型,都会报错。

函数返回

函数的返回值就是最后一条表达式的返回值。

但也可以使用 return 来提前返回。

函数需要手动指明返回值的类型,不然会默认返回的 (),会出现返回的类型与指定的类型不一致的错误。

rust 复制代码
fn plus_five(x:i32) -> i32 {
    x + 5
}

fn main() {
    let x = plus_five(5);

    println!("The value of x is: {}", x);
}
rust 复制代码
fn plus_or_minus(x:i32) -> i32 {
    if x > 5 {
        return x - 5
    }

    x + 5
}

fn main() {
    let x = plus_or_minus(5);

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

特殊返回类型

当一个函数没有返回值时,返回单元类型 ()

  • 函数没有返回值,那么返回一个 ()
  • 通过 ; 结尾的表达式返回一个 ()
rust 复制代码
use std::fmt::Debug;

fn report<T: Debug>(item: T) {
  println!("{:?}", item);
// 会隐式地返回一个 ()
}

永不返回的发散函数 !

当使用 ! 作为函数的返回类型的时候,表示该函数永不返回(diverge function)。

在Rust中,发散函数(diverging function)指的是一个永远不会返回的函数。这意味着一旦调用发散函数,程序就会立刻终止或进入无限循环,而不会返回到调用的位置。发散函数主要有两个作用:

  1. 在编译时表明该函数永远不会返回,这对于编译器的优化和检查非常有用。例如,当编写一个 panic 的宏时,可以将该宏标记为发散函数,这样编译器就知道在宏的调用之后不需要继续进行代码分析。
  2. 在某些情况下,显式表明函数的发散性质可以增加程序的可读性。例如,在Rust中,panic! 宏就是一个发散函数,当出现严重错误时,调用 panic! 可以立即终止程序并打印错误信息。

这种语法往往用做会导致程序崩溃的函数:

rust 复制代码
fn dead_end() -> ! {
  panic!("你已经到了穷途末路,崩溃吧!");
}

没弄懂 发散函数 的作用。

  • panic!(): 这是Rust中的一个宏,用于表示程序发生严重错误并且需要立即终止的情况。当调用 panic!() 时,程序将会立即停止执行,并打印出错误消息。这通常用于处理无法恢复的错误或者在开发阶段的临时调试目的。
  • todo!():这也是Rust中的一个宏,用于标记代码中需要未来实现的部分。当调用 todo!() 时,程序会编译失败并显示一条信息,提示开发者有未完成的工作。这可以帮助团队协作和开发过程中的任务管理。
  • loop {std::thread::sleep(std::time::Duration::from_secs(1))}:这是一个循环语句,其目的是在程序中创建一个无限循环。通常情况下,这样的循环用于执行某些需要持续运行的任务,比如定时任务或者事件轮询。
  • unimplemented!():这同样是Rust中的一个宏,用于表示代码中的某些功能尚未实现。与 todo!() 类似,调用 unimplemented!() 会导致编译失败,并显示出相应的信息。这可以帮助开发者标记哪些部分的代码需要后续实现。
相关推荐
Kalika0-012 分钟前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch14 分钟前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
代码雕刻家29 分钟前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
一个闪现必杀技32 分钟前
Python入门--函数
开发语言·python·青少年编程·pycharm
Fan_web36 分钟前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
龙图:会赢的39 分钟前
[C语言]--编译和链接
c语言·开发语言
杨哥带你写代码2 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
XKSYA(小巢校长)2 小时前
NatGo我的世界联机篇
开发语言·php
AskHarries2 小时前
读《show your work》的一点感悟
后端
Cons.W2 小时前
Codeforces Round 975 (Div. 1) C. Tree Pruning
c语言·开发语言·剪枝