深入理解Rust函数

文章目录

  • 一、概述
  • 二、函数要点
  • 三、函数参数
  • 四、函数返回
  • 五、Rust中的特殊返回类型
    • 5.1、无返回值
    • 5.2、永不返回的发散函数


  团队博客: 汽车电子社区


一、概述

在这里插入图片描述

二、函数要点

  1、函数名和变量名使用蛇形命名法(snake case),例如 fn add_two() -> {}。
  2、函数的位置可以随便放,Rust 不关心我们在哪里定义了函数,只要有定义即可。
  3、每个函数参数都需要标注类型。

三、函数参数

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

fn main() {another_function(5, 6.1);
}fn another_function(x: i32, y: f32) {println!("The value of x is: {}", x);println!("The value of y is: {}", y);
}

四、函数返回

  在 Rust 中函数就是表达式,因此我们可以把函数的返回值直接赋给调用者。
  函数的返回值就是函数体最后一条表达式的返回值,当然我们也可以使用 return 提前返回,下面的函数使用最后一条表达式来返回一个值:

fn plus_five(x:i32) -> i32 {x + 5
}fn main() {let x = plus_five(5);println!("The value of x is: {}", x);
}

  来看两个重点:
    1、let x = plus_five(5),说明我们用一个函数的返回值来初始化 x 变量,因此侧面说明了在 Rust 中函数也是表达式,这种写法等同于 let x = 5 + 5;。
    2、x + 5 没有分号,因为它是一条表达式,这个在上一节中我们也有详细介绍。
  再来看一段代码,同时使用 return 和表达式作为返回值:

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);
}

  plus_or_minus 函数根据传入 x 的大小来决定是做加法还是减法,若 x > 5 则通过 return 提前返回 x - 5 的值,否则返回 x + 5 的值。

五、Rust中的特殊返回类型

5.1、无返回值

  单元类型 (),是一个零长度的元组。它没啥作用,但是可以用来表达一个函数没有返回值:
    1、函数没有返回值,那么返回一个 ()。
    2、通过 ; 结尾的表达式返回一个 ()。
  例如下面的 report 函数会隐式返回一个 ():

use std::fmt::Debug;fn report<T: Debug>(item: T) {println!("{:?}", item);}

  与上面的函数返回值相同,但是下面的函数显式的返回了 ():

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

  在实际编程中,你会经常在错误提示中看到该 () 的身影出没,假如你的函数需要返回一个 u32 值,但是如果你不幸的以 表达式; 的方式作为函数的最后一行代码,就会报错:

fn add(x:u32,y:u32) -> u32 {x + y;
}

  只有表达式能返回值,而 ; 结尾的是语句,在 Rust 中,一定要严格区分表达式和语句的区别,这个在其它语言中往往是被忽视的点。

5.2、永不返回的发散函数

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

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

  下面的函数创建了一个无限循环,该循环永不跳出,因此函数也永不返回:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/421704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚热带常见自然林病虫害识别系统需求分析

文章目录 系统可行性分析技术可行性操作可行性经济可行性系统需求分析 前端用户需求系统数据库需求分析数据字典数据流图 非功能需求分析小结 系统可行性分析 基于 Web 的亚热带常见自然森林病虫害识别系统可行性分析应用分析开发的必要性与可进行性,一般分为科技有效性、使用…

位运算的魅力:使用Redis Bitmap高效处理百万级布尔值

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 位运算的魅力&#xff1a;使用Redis Bitmap高效处理百万级布尔值 前言1. Bitmap的基本概念Bitmap的定义和原理为什么Bitmap特别适合处理大量布尔值 2. Redis中的Bitmap操作基础命令高级命令 实际应用场…

74.MySQL 分页原理与优化(下)

文章目录 前言一、一次分页查询的演进二、分页数据在不同页反复出现的坑 前言 上一篇文章介绍了分页原理与优化&#xff1a;73.MySQL 分页原理与优化&#xff08;上&#xff09; 但分页还有一个“坑”需要注意&#xff0c;本文细细道来&#xff0c;可能很多朋友都踩过这个坑还…

寒假思维训练day12 E. Increasing Subsequences

适合喜欢算法、对算法感兴趣的朋友。 今天又来更新啦&#xff0c;断更一天&#xff0c;有点摆了&#xff0c;今天继续补上&#xff0c;献上一道1800的构造。 摘要&#xff1a; part1&#xff1a;关于一些构造题的总结 part2: 每日一题: Problem - E - Codeforces (链接在此…

JAVA------基础篇

java基础 1.JDK JDK :java development kit JRE&#xff1a;java runtime environment JDK包含JRE java跨平台&#xff1a;因为java程序运行依赖虚拟机&#xff0c;虚拟机需要有对应操作系统的版本&#xff0c;而jre中有虚拟机。 当你想要在Linux系统下运行&#xff0c;则需要…

HCIA-HarmonyOS设备开发认证-HarmonyOS简介

目录 前言目标一、HarmonyOS简介1.1、初识HarmonyOS1.2、HarmonyOS典型应用场景 二、HarmonyOS架构与安全2.1、HarmonyOS架构 前言 本章主要介绍HarmonyOS分布式操作系统的概念、关键技术与能力以及HarmonyOS典型的应用场景。 目标 学习完成本课程后&#xff0c;您将能够&…

kubeadm 安装k8s集群后,master节点notready问题解决方案

使用kubeadm 安装k8s集群后&#xff0c;加载calico cni 网络组件后&#xff0c;master节点notready问题 表现为&#xff1a; 使用命令查看日志&#xff1a;journalctl -f -u kubelet 报错如下&#xff1a; Failed to start ContainerManager failed to initialize top level…

【Linux】Shell 命令以及运行原理

Shell 命令以及运行原理 当用户登录 Linux 系统的时候&#xff0c;系统会给用户创建一个新的进程&#xff0c;一般叫做 bash&#xff08;命令行解释器&#xff09;。 Linux 严格意义上说的是一个操作系统&#xff0c;我们称之为 “核心&#xff08; kernel &#xff09;” &…

uniapp踩坑之项目:canvas第一次保存是空白图片

在ctx.draw()回调生成图片&#xff0c;参考canvasToTempFilePath接口文档 // data imgFilePath: null,// 缓存二维码图片canvas路径//js // 首先在draw&#xff08;&#xff09;里进行本地存储 ...... ctx.draw(false, () >{uni.canvasToTempFilePath({ // 把画布转化成临时…

138.随机链表的复制(附带源码)

目录 一、思路分析 二、如何操作 三、源码 深拷贝&#xff1a;原封不动的拷贝一份 一、思路分析&#xff1a; 这一题&#xff0c;偏向于技巧性。如果是按照工科思维硬推&#xff0c;那会非常头大&#xff0c;脑袋瓜疼。 这一题目的核心难点在于&#xff1a;处理random指针…

学习STM32,该用哪款开发工具?

有很多初学者在问&#xff1a;学习STM32&#xff0c;该用哪款开发工具&#xff1f; 我首先说一下我的观点&#xff1a; 1.没有最好&#xff0c;只有适不适合&#xff0c;适合自己的才是最好的。 2.开发工具很多&#xff0c;各有各的特点&#xff0c;有优点肯定也有缺点。 本文…

Java网络编程-16

网络层级 import java.net.InetAddress; import java.net.UnknownHostException;//测试IP public class Demo {public static void main(String[] args) throws UnknownHostException {//查询本机地址InetAddress inetAddress InetAddress.getByName("127.0.0.1");…