Rust 基础入门 —— 函数

简介: 当用 ! 作函数返回类型的时候,表示该函数永不返回( diverge function ),特别的,这种语法往往用做会导致程序崩溃的函数:

函数作为rust 基本类型中的最后一个,是的他也是基本类型。所以我们可以推测出第一点:

形如:


fn zry(z:i32,r:i32,y:i32) -> i32 {...} // 注意这里没有分号采用的是表达式写法。


let z = zry(1,2,3);


的赋值方式是合理的。


这点对于C++ 程序员来说是一个很有意思的点,我们不需要设定函数返回类型是函数指针然后通过回调函数去调用了。现在直接一点,我们关注并发下的逻辑本身。


接下来让我们聊聊之前不常说的返回值部分。


函数返回


rust 中的返回类型分以下几种


  1. 正常返回


  1. 表达式
  2. return 返回
  3. 规定类型返回

2.特殊返回

  1. 单元类型返回
  2. 不返回(牛不牛,不返回,也是一种返回。堪比 那句:你不会所以你会。)

好了接下来让我们介绍这几种具体返回类型。


  • 表达式返回:
fn zry(z:i32,r:i32,y:i32)  {
    z+r+y
} // 注意这里没有分号采用的是表达式写法。
let z = zry(1,2,3); // z = 6


return 返回
fn zry(z:i32,r:i32,y:i32) -> i32 {
    return z+r+y;
}  
let z = zry(1,2,3); // z = 6


  • 规定类型返回
fn zry(z:i32,r:i32,y:i32) -> i32 {// 注意这里规定了返回类型,而表达式返回没有。
    z+r+y;
} 
let z = zry(1,2,3); // z = 6


  • 单元类型返回
fn main() {
    use std::fmt::Debug;
    fn report<T: Debug>(item: T) {
      println!("{:?}", item);
    }
}


  • 或者显示声明


fn main() {
    fn clear(text: &mut String) -> () {
      *text = String::from("");
    }
}


最牛逼的永不返回的返回

  • 当用 ! 作函数返回类型的时候,表示该函数永不返回( diverge function ),特别的,这种语法往往用做会导致程序崩溃的函数:
fn main() {
    fn dead_end() -> ! {
      panic!("探索永不停歇!");
    }
}


fn main() {
    fn forever() -> ! {
      loop {
        //...
      };
    }
}


  1. 在Rust中,使用!作为函数的返回类型表示该函数是一个"diverge function",即该函数永远不会返回。这种机制在Rust中有一些实际的使用意义。


  1. Panic:当函数遇到无法处理的错误或异常情况时,可以选择使用panic!宏来触发panic。由于panic会导致程序的非正常终止,所以panic的函数可以使用!作为返回类型,表示它们永远不会返回。


  1. 循环:有时候需要编写一个无限循环的函数,例如一个服务器的主循环或一个事件处理循环。这些函数可以使用loop语句来创建一个无限循环,并使用!作为返回类型,表示它们永远不会返回。


库函数:在某些情况下,库函数可能需要在特定条件下终止程序的执行,例如在某些安全检查失败时。这些函数可以使用!作为返回类型,表示它们永远不会返回。


使用!作为函数的返回类型可以帮助编译器进行静态分析和检查,以确保程序的正确性。如果一个函数被声明为返回!类型,但实际上却返回了一个值,编译器会发出警告或错误。这有助于避免潜在的错误和逻辑问题。


需要注意的是,!类型是Rust中的一个特殊类型,它是所有类型的子类型。这意味着可以将!类型的值转换为任何其他类型的值,但反过来是不可能的。因此,!类型的函数可以用作任何其他类型的函数的替代品。

目录
相关文章
|
7天前
|
Rust 开发者
Rust函数入门与函数重载
Rust函数入门与函数重载
6 0
|
2月前
|
Web App开发 Rust 安全
一名C++程序员的Rust入门初体验
作者最近尝试写了一些Rust代码,本文主要讲述了对Rust的看法和Rust与C++的一些区别。
152 3
|
2月前
|
Rust 编译器 容器
|
2月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
36 0
|
2月前
|
存储 Rust 程序员
rust中的函数:定义、调用与闭包
本文将深入探讨Rust编程语言中函数的定义、调用方式,以及闭包(closures)的概念和应用。我们将从函数的基本语法出发,逐步深入到函数的参数传递、返回值,再进一步介绍闭包及其捕获环境的能力,帮助读者全面理解并熟练运用Rust中的函数与闭包。
|
2月前
|
Rust 编译器
【Rust】——函数(所有权)以及借用或引用
【Rust】——函数(所有权)以及借用或引用
36 0
|
2月前
|
Rust 编译器
【Rust】——函数
【Rust】——函数
20 0
|
2月前
|
Rust Java 编译器
【一起学Rust | 基础篇】rust函数与流程控制详解
【一起学Rust | 基础篇】rust函数与流程控制详解
60 0
【一起学Rust | 基础篇】rust函数与流程控制详解
|
8月前
|
Rust 安全 编译器
Rust 基础入门 —— 2.3.所有权和借用 (二)
同一时刻,你只能拥有要么一个可变引用, 要么任意多个不可变引用 引用必须总是有效的 贴一个体验不错的学习链接恰饭:学习链接
52 0
|
8月前
|
Rust 安全 算法
Rust 基础入门 ——所有权 引言 :垃圾自动回收机制的缺陷。
能有这些问题的部分发生场景: 游戏开发:在游戏开发中,需要保持稳定的帧率和低延迟,以提供流畅的游戏体验。如果GC频繁触发或停顿时间过长,会导致游戏卡顿或掉帧,影响游戏的流畅度和响应性能。
78 0