rust语句,表达式以及函数

news2025/1/30 15:53:08

语句和表达式

在rust里,语句和表达式的区别是非常重要的。语句没有返回值,表达式有返回值。例如:

fn main() {
    let y = {
        let x = 3;      // 赋值语句
        x + 1           // 表达式
    };

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

上面使用一个语句块表达式将值赋给 y 变量。一个重要的区别是,表达式不能以分号结尾。一旦给表达式加上分号,它就变成了语句,不再有返回值。
也可以视作语句的返回值是(),表达式的返回值是表达式本身计算之后的值
需要注意的是let是语句,因此不能将let语句赋值给其他值。在下面介绍函数的时候,我们将更加深刻的理解语句和表达式的区别。

函数

在rust中,声明函数的关键字 fn。正如声明main函数使用的是fn一样。下面是一个函数的例子:

fn add(i: i32, j: i32) -> i32 {
   i + j
}

声明函数的关键字 fn ,函数名 add(),参数 i 和 j,参数类型和返回值类型都是 i32。这看起来和其他大多数编程语言是一致的。但是细节上,可以看到没有使用return语句。这一点和前面提到的表达式有关。注意到i+j后面没有分号,它是一个表达式。在 Rust 中函数就是表达式,因此在没有使用return进行返回的时候。函数体中最后一个表达式的值,会被视为函数的返回值。我们来调用这个add函数看看。

fn main() {
    let x = add(1, 2);
    println!("{x}");
    println!("{}", add(2,2));
}

fn add(i: i32, j: i32) -> i32 {
    i + j
}

输出结果如下所示:

3
4

当函数没有返回值的时候,可以像下面这样显示的来声明返回值。

fn t1() -> () {
    let x = 1;
    println!("t1{x}");
    x + 1
}

当然,也可以不进行显示的声明,例如:

fn t2() {
    let x = 1;
    println!("t2{x}");
}

因此,总体而言,在rust中函数值可以被return返回,也可以是函数体中最后一个表达式的值。如果函数没有返回值,那么将返回一个()。

发散函数

除了这些以外,rust中还有发散函数,这些函数永不返回。
当用 ! 作函数返回类型的时候,表示该函数永不返回( diverge function ),特别的,这种语法往往用做会导致程序崩溃的函数:

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

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

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

函数声明的语法

函数的声明语法下图说的非常明白。
在这里插入图片描述

参考资料

rust圣经

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL | 自联接 Self Join

有时你可能需要获取位于同一个表中的相关数据。为此,你可以使用一种特殊的联接,称为自联接(Self Join)。在今天的文章中,我们将学习如何使用 Navicat Premium 作为数据库客户端编写包含自联接的查询。如果你没未使用过…

报表工具软件-FineReport JS实现下拉框自动展开

1. 概述 1.1 预期效果 在使用下拉框做筛选查询时,需要点击下拉框下拉三角才会展开所有选项,有些使用场景下,用户希望自动展开选项列表,尤其是在多个控件联动场景下。如下图所示: 地区控件选择地区后,销售…

新一代最强开源UI自动化测试神器Playwright(Java版)页面元素交互

Playwright 可以与 HTML 输入元素交互,例如文本输入、复选框、单选按钮、下拉选择框、鼠标点击、字符输入、模拟键盘事件以及上传文件和焦点元素。 Playwright 操作文本框 使用Locator.fill()是填写表单字段的最简单方法。input它聚焦元素并使用输入的文本触发事件…

JVM面试题详解系列——垃圾收集算法详解

垃圾收集算法 标记 - 清除算法 首先标记出所有需要被回收的对象,标记完后统一回收所有被标记的对象。 后续的收集算法都是基于这种思路并对其不足进行改进而得到的。 这种方法主要有两个缺点: 一个是效率问题,标记和清除两个过程的效率都…

最短路径(难)

目录 一、Dijkstra算法 动态演示: 关键代码: 完整代码: 运行结果: 二、Floyd算法 详细介绍 关键算法: 完整代码: 运行结果: 一、Dijkstra算法 Dijkstra算法:可以求带权图中…

开发者还能这样开发小游戏变现

根据《2022微信小游戏增长白皮书》显示,目前微信小游戏开发者数量已经超过10万人次,特别是在持续出现小游戏爆火社交平台的趋势下,小游戏发展势头强劲。 此外仅看微信小游戏的商业规模,2022年相较于2021年实现了超 30%的商业增长…

快速了解Azure SQL部署类型的小技巧

目录 (一)前言 (二)正文 1. 语法 2. 结果分析 3. 实例 (1)SQL SERVER (2)Azure SQL (一)前言 我们知道在常规的SQL SERVER中我们会使用SELECT VERSIO…

我国汽车保险杠行业对汽车产业依存度较大 市场需求呈良性上升态势

根据观研报告网发布的《2022年中国汽车保险杠市场分析报告-市场发展格局与投资潜力研究》显示,汽车保险杠是汽车车身上一种较大的外覆盖零部件,其作用是在汽车发生碰撞时,保护汽车车身及附件,轻微碰撞可以依靠保险杠自身吸收能量&…

MySQL中的这14个神仙功能,惊艳到我了!!!

前言 我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中…

劲牌连续两年问鼎全国质量大奖背后的密码

11月24日,第二十届全国质量奖“中国杰出质量人”正式公布,劲牌公司董事长吴少勋成为全国10人名单之一。这是劲牌公司继2021年获得第十九届全国质量奖组织奖后,又获得全国质量奖个人奖。连续两年分别获得全国质量奖组织奖和个人奖,…

18岁开始学习编程是否来得及?

18岁开始学习编程完全来得及,不仅来得及,而且还可以选择走专业的程序研发路线,在当前产业互联网的推动下,未来程序开发岗位的数量还会进一步得到攀升。 18岁开始学习编程可以根据自身的实际情况来规划具体的学习路线,对…

java回顾:ssm整合、纯注解开发

目录 一、搭建环境 1.1、spring环境搭建 1.1.1 测试SpringIOC环境 1.2、搭建Mybatis环境(原生mybatis) 二、Spring整合mybatis 三、Spring整合SpringMVC 四、SSM执行流程 五、纯注解开发配置文件模板 声明: SpringMVC: 注解 XML 注解: Control…

[streamlit]数据科学科研工作者的神器,必须要推荐一下

1. 前言 做科研当然要有过硬的专业知识,但是也少不了一些辅助,才能最大程度发挥我们的能力。因此,除去我们模型性能优秀,结果良好以外,如何进行一个好的展示,也是非常有必要的。那么今天,我们就…

推荐系统:基于ConvNCF推荐算法的推荐系统实现 代码+数据详细教程

1.案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。ConvNCF推…

西瓜书-决策树

决策树 决策树划分时,当前属性集为空,或所有样本在所有属性上取值相同,将结点标记为叶节点,其类别标记为当前样本集中样本数最多的类。 决策树算法的核心在于:选择最优划分属性 判别分类的三种情形: 当前…

[前端攻坚]:详解call、apply、bind的实现

call apply bind 的实现的面试中几乎必定出现的一些内容,今天来用一篇文章整理一下这里的内容,加深一下JS基础知识体系。同时文章也被收录到我的《JS基础》专栏中,欢迎大家点击收藏加关注。 call的实现 call() 方法使用一个指定的 this 值和单…

Oracle Ask Tom分区学习系列: 面向开发者的分区(Partitioning)教程

Oracle Partitioning: A Step-by-Step Introduction for Developers是Oracle数据库开发者课程之一。 Development with Oracle Partitioning/使用 Oracle 分区进行开发 Partitioning in the database reflects the same way we handle large tasks in the real world. When a t…

Redis分布式锁的10个坑

前言 大家好,我是田螺。 日常开发中,经常会碰到秒杀抢购等业务。为了避免并发请求造成的库存超卖等问题,我们一般会用到Redis分布式锁。但是使用Redis分布式锁,很容易踩坑哦~ 本文田螺哥将给大家分析阐述,Redis分布式…

如何优化 MySQL 服务器

有一些数据库服务器的优化技术,主要是管理系统配置而不是调整 SQL 语句。它适用于那些希望确保服务器的性能以及可伸缩性的 DBA,以及适用于启动安装脚本建立数据库和运行 MySQL 自己进行开发、测试等以提生产力的开发人员。 系统因素 一些系统级方面也会…

推荐几个方法教你学会怎样制作视频剪辑

随着时代的发展,新媒体行业的壮大,应该不少小伙伴每天都需要制作视频剪辑吧,有些可能是因为从事短视频行业,每天就需要发送视频内容,才能吸引观众,也有些可能只是想单纯分享一些生活视频。那你知道如何制作…