006、函数

1. 一个小技巧

        在前面文章中,我们提到,在黑窗口中输入 code . 命令可以快速在 Visual Studio Code 中打开新建的项目,这个是你刚刚新建了项目,并且黑窗口正好是打开的情况下。

        如果是之前创建的项目,用上面的方法就会有点麻烦了。现在,你可以先点进该项目的根目录,然后在文件夹中的空白处鼠标右键,在弹出的菜单中找到 通过 Code 打开 单击即可。

        如果你和我一样也是 Windows 11 系统, 通过 Code 打开 选项被隐藏在 显示更多选项 中了,你可以先按住 Shift键 然后再鼠标右键就可以看到 通过 Code 打开 这个选项了。

        这两种方式结合使用,可以稍微提高一些效率。

 

2. 函数

        这篇文章我们来学习一下Rust中的函数,下面思维导图中就是接下来要讲的内容:

        函数(function)在Rust中的应用非常广泛,在之前的文章中,我们已经接触到了最为重要的main函数了,它是大部分程序开始的地方。你应该也对 fn 关键字有印象,可以用它来声明一个新的函数。 

        Rust代码使用蛇形命名法(snake case)来作为规范函数和变量名称的风格。蛇形命名法只使用小写的字母进行命名,并以下画线分隔单词。下面就是一个包含函数定义的示例:

        在Rust中,函数定义以 fn 关键字开始并紧随函数名称与一对圆括号,另外还有一对花括号用于标识函数体开始和结尾的地方。我们可以使用 函数名 + 圆括号 的方式来调用函数。 

        Rust不关心你在何处定义函数,只要这些定义对于使用区域是可见的即可。因此,你可以在 main 函数之前定义,也可以在 main 函数之后定义,都是没有问题的。

2.1 函数参数

        在函数签名中,你必须显式地声明每个参数的类型。这是在Rust设计中设计者们经过慎重考虑后做出的决定:由于类型被显式地注明了,因此编译器不需要通过其他部分的代码进行推导就能明确地知道你的意图。

        代码示例:

 

        另外,你可以像下面一样,通过使用逗号分隔符来为函数声明多个参数:

 

        注意哈,这里我给两个值声明的都是 i32 类型,实际可以是不同类型。 

2.2 函数体中的语句和表达式

        函数体由若干条语句组成,并可以以一个表达式作为结尾。

        由于Rust是一门基于表达式的语言,所以它将语句(statement)与表达式(expression)区别为两个不同的概念,这与其他某些语言不同。 

        语句 指那些执行操作但不返回值的指令,而 表达式 则是指会进行计算并产生一个值作为结果的指令。

        举个🌰:

let x = 5; //这是语句

        C语言或Ruby语言中的赋值语句会返回所赋的值。在这些语言中,你可以编写类似于 x = y = 6 这样的语句,并使得 x y 变量同时拥有6这个值,但这在Rust中是行不通的。

        与语句不同,表达式会计算出某个值来作为结果。你在Rust中编写的大部分代码都会是表达式。以简单的数学运算 5 + 6 为例,这就是一个表达式,并且会计算出值11。

        另外,表达式本身也可以作为语句的一部分。语句 let x = 5; 中的字面量5就是一个表达式,它返回5作为自己的计算结果。调用函数是表达式,调用宏是表达式,我们用来创建新作用域的花括号 { } 同样也是表达式

        假如我们在表达式的末尾加上了分号,这一段代码就变为了语句而不会返回任何值。

        举个🌰:

fn main() {let x = 5;let y = {let x = 3;x + 7};println!("y的值为:{}", y);
}

2.3 函数的返回值

        函数可以向调用它的代码返回值。虽然你不用为这个返回值命名,但需要在箭头符号 -> 的后面声明它的类型。在Rust中,函数的返回值等同于函数体最后一个表达式的值。你可以使用 return 关键字并指定一个值来提前从函数中返回,但大多数函数都隐式地返回了最后的表达式。下面是一个带有返回值的函数示例: 

        在以上的 five 函数中,除了数字5,没有任何其他的函数调用、宏调用,甚至是 let 语句,但它在Rust中确实是一个有效的函数。注意,这个函数的返回值类型通过 -> i32 被指定了。 

        其次,这里的 five 函数没有参数,仅仅定义了返回值的类型。函数体中除了孤零零的、不带分号的5,没有任何东西,而它也正是我们想要用来作为结果返回的表达式。

        再看一个🌰:

        如果我们在 plus_one 函数中的 x + 1 后面加上分号, 就会报错。

        这是因为我们在定义 plus_one 的过程中声明它会返回一个 i32 类型的值,但由于语句并不会产生值,所以Rust默认返回了一个空元组,也就是上面描述中的()。实际的返回值类型与函数定义产生了矛盾,进而触发了编译时错误。

3. 结语

        为了让大家有更好的阅读体验,标题我用橘色标注,子标题用蓝色标注。如果你对角角的文章有其它方面的建议或要求,非常欢迎你在评论区留言,角角一定酌情采纳并应用到后面的文章中。

        最后,码字不易,如果大家能给我一个赞,我也会动力满满,万分感谢你们的支持!

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

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

相关文章

git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作)

文章目录 1. Git概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git简史1.5 Git工作机制1.6 Git和代码托管中心 2. Git安装3. Git常用命令3.1 设置用户签名3.1.1 说明3.1.2 语法3.1.3 案例实操 3.2 初始化本地库3.2.1 基本语法3.2.2 案例实操3.2.3 结果查看 3…

【Java】log4j和slf4j区别

log4j:Apache Software Foundation 开源 slf4j:不支持日志滚动等高级功能 在开源库或内部库中使用 SLF4J,将使其独立于任何特定的日志记录实现,这意味着无需为多个库管理多个日志记录配置,您的客户端将会很需要这一点…

【k8s】deamonset文件和说明

目录 deamonset的相关命令 deamonset的定义 deamonset的使用场景 deamonset的例子 deamonset字段说明 serviceAccountName DaemonSet的结构及其各个部分的作用 deamonset的相关命令 #查看<name-space>空间内有哪些deamonset kubectl get DaemonSet -n <na…

Django 学习教程- Django 入门案例

Django学习教程系列 Django学习教程-介绍与安装 前言 本教程是为 Django 5.0 编写的&#xff0c;它支持 Python 3.10 至以上。如果 Django 版本不匹配&#xff0c;可以参考教程 使用右下角的版本切换器来获取你的 Django 版本 &#xff0c;或将 Django 更新到最新版本。如果…

判断素数的方法大全

质数又称素数。一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则称为合数&#xff08;规定1既不是质数也不是合数&#xff09;。 一、直接暴力法求素数 n的素数的判断&#xff0c;我自己只想到了把2到n-1&#xf…

Winclone Pro 10 for Mac:轻松备份和还原你的Windows系统

Winclone Pro 10 for Mac是一款专为Mac用户设计的备份和还原软件&#xff0c;旨在帮助用户轻松管理和保护他们的Windows系统。无论是为了数据安全还是系统的稳定性&#xff0c;Winclone Pro 10都能提供全面的解决方案。 这款软件具备强大的备份功能&#xff0c;能够快速而准确…

Java流程控制语句(if语句,switch语句,for循环,while循环,do...while循环,三种循环的区别)

文章目录 第一章 流程控制语句1.1 流程控制语句分类1.2 顺序结构 第二章 判断语句&#xff1a;if语句2.1 if语句格式1练习1&#xff1a;老丈人选女婿练习2&#xff1a;考试奖励第一种格式的细节&#xff1a; 2.2 if语句格式2练习1&#xff1a;吃饭练习2&#xff1a;影院选座 2.…

AI产品经理 - 如何做一款软硬协同AI产品

【背景】从0做一款软硬协同的AI产品&#xff0c;以智能医药保温箱 1.以智能医药保温箱 2.调研定义市场方向 地点&#xff1a;医药、实验室 场景&#xff1a;长宽高/装箱/运输/实验室 3.需求挖掘 4.如何进行软硬件AI产品工作 软硬件产品设计&#xff1a;功能/硬件外观设计、…

2023就这样过去了,2024会更好吗?

2023年&#xff0c;不是很好 2023年是疫情后的第一年&#xff0c;疫情过去了&#xff0c;大家都有大多的希望&#xff0c;希望经济可以恢复&#xff0c;希望信心可以恢复&#xff0c;但是整体都是远远低于预期的。年初的一片热潮&#xff0c;年中的一片哀嚎&#xff0c;年底基…

SetWindowsHookEx: 全局钩子实现键盘记录器

简介 SetWindowsHookEx 钩子(Hook)&#xff0c;是Windows消息处理机制的一个平台&#xff0c;应用程序可以在上面设置子程以监视指定窗口的某种消息&#xff0c;而且所监视的窗口可以是其他进程所创建的。当消息到达后&#xff0c;在目标窗口处理函数之前处理它。钩子机制允许应…

【华为OD机试真题2023CD卷 JAVAJS】分割均衡字符串

华为OD2023&#xff08;C&D卷&#xff09;机试题库全覆盖&#xff0c;刷题指南点这里 分割均衡字符串 知识点编程基础 题目描述&#xff1a; 均衡串定义&#xff1a;字符串只包含两种字符&#xff0c;且两种字符的个数相同。 给定一个均衡字符串&#xff0c;请给出可分割成…

Python之线程池设计实战

案例 10000条数据&#xff0c;要先下载&#xff0c;然后需要从并发量支持一秒20次的识别接口通过&#xff0c;最近将结果写入excel中&#xff0c;如果用python完成&#xff0c;如何实现&#xff0c;线程池大小设多少合适&#xff0c;线程池大小在哪用合适 针对这个需求&#…

Hive生产调优介绍

1.Fetch抓取 Fetch抓取是指&#xff0c;Hive中对某些情况的查询可以不必使用MapReduce计算。例如&#xff1a;SELECT * FROM employees;在这种情况下&#xff0c;Hive可以简单地读取employee对应的存储目录下的文件&#xff0c;然后输出查询结果到控制台。 在hive-default.xml…

云卷云舒:构建业务型电信智能运维方法

1 引言 智能运维&#xff08;AIOps-Algorithmic IT Operations基于算法的IT运维&#xff09;是人工智能技术在IT运维领域的运用&#xff0c;引用Gartner 的报告的一段话“未来几年&#xff0c;将近50%的企业将会在他们的业务和IT运维方面采用AIOps&#xff0c;远远高于今天的10…

Cloud-Platform 学习——Part6 WebClient异步非阻塞请求工具

参考&#xff1a; https://zhuanlan.zhihu.com/p/370935458?utm_id0 - 知乎专栏在 SpringBoot 中从 RestTemplate 过渡到 WebClient&#xff1a;详细指南-CSDN博客 多年来&#xff0c;Spring 框架的 RestTemplate 一直是客户端 HTTP 访问的首选解决方案&#xff0c;它提供同步…

php的laravel权限问题

1.这是我新建的一个路由&#xff0c;然后就是说每新建一个路由都要给他开个权限&#xff01;&#xff01;&#xff01;&#xff01; 2.这个是组内大佬写的&#xff1a; 我们也可以在里面加&#xff0c;也可以在浏览器的页面手动加&#xff08;对我们新手来说还是浏览器的页面…

matlab导出高清图片,须经修改后放入latex(例如添加文字说明,matlab画图不易操作)

一、背景 我们在写文章时&#xff0c;使用matlab画图后&#xff0c;如果不需要对图片进行额外修改或调整&#xff0c;例如添加文字说明&#xff0c;即可直接从matlab导出eps格式图片&#xff0c;然后插入到latex使用。 通常latex添加图片&#xff0c;是需要eps格式的。 但很…

左耳朵耗子:程序员练级攻略

在一个小公司&#xff0c;天天 CRUD&#xff0c;程序员如何练级&#xff0c;不断提升自己&#xff1f; 在大公司&#xff0c;就是个螺丝钉&#xff0c;天天就是自己那一亩三分地&#xff0c;如何不断提升自己&#xff0c;不被淘汰&#xff1f; 第一步建立自己的学习实验室 在…

微服务实战系列之Dubbo(下)

前言 眼看着2023即将走远&#xff0c;心里想着似乎还有啥&#xff0c;需要再跟各位盆友叨叨。这不说曹操&#xff0c;曹操就来了。趁着上一篇Dubbo博文的余温尚在&#xff0c;博主兴匆匆地“赶制”了Dubbo的下集&#xff0c;以飨读者。 上一篇博主依然从Dubbo的内核出发&#…

UTF-8编码:打破字符编码的国界

UTF-8编码&#xff1a;打破字符编码的国界 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同探讨编程世界中一项至关重要的技术——“UTF-…