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中的一个特殊类型,它是所有类型的子类型。这意味着可以将!类型的值转换为任何其他类型的值,但反过来是不可能的。因此,!类型的函数可以用作任何其他类型的函数的替代品。

目录
相关文章
|
17天前
|
Rust 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
34 1
|
18天前
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
29 2
|
19天前
|
Rust 安全 云计算
Rust语言入门:安全性与并发性的完美结合
【10月更文挑战第25天】Rust 是一种系统级编程语言,以其独特的安全性和并发性保障而著称。它提供了与 C 和 C++ 相当的性能,同时确保内存安全,避免了常见的安全问题。Rust 的所有权系统通过编译时检查保证内存安全,其零成本抽象设计使得抽象不会带来额外的性能开销。Rust 还提供了强大的并发编程工具,如线程、消息传递和原子操作,确保了数据竞争的编译时检测。这些特性使 Rust 成为编写高效、安全并发代码的理想选择。
15 0
|
3月前
|
存储 Rust 编译器
30天拿下Rust之函数详解
在Rust中,函数是程序的基本构建块,是代码复用的基本单位,用于封装一系列执行特定操作和计算的语句。函数是可重用的代码片段,可以接受输入参数并产生输出。通过合理使用函数,可以提高代码的可读性、可维护性和可重用性。
45 4
|
4月前
|
Rust 编译器 测试技术
Rust与C++的区别及使用问题之Rust中函数参数传递的问题如何解决
Rust与C++的区别及使用问题之Rust中函数参数传递的问题如何解决
|
5月前
|
Rust Linux iOS开发
【Rust学习】01_入门准备
让我们开始您的 Rust 之旅吧!有很多东西要学,但每一段旅程都是从第一步开始的,在本章中,我们将一起来学习以下知识点: - 在 Linux、macOS 和 Windows 上安装 Rust - 编写打印程序 Hello, world! - 使用 cargo Rust 的包管理器和构建系统
77 1
|
5月前
|
Rust 开发者
Rust函数入门与函数重载
Rust函数入门与函数重载
120 0
|
6月前
|
Web App开发 Rust 安全
一名C++程序员的Rust入门初体验
作者最近尝试写了一些Rust代码,本文主要讲述了对Rust的看法和Rust与C++的一些区别。
|
6月前
|
Rust 编译器 容器
|
6月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
57 0