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 更新到最新版本。如果…

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;功能/硬件外观设计、…

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

简介 SetWindowsHookEx 钩子(Hook)&#xff0c;是Windows消息处理机制的一个平台&#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…

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格式的。 但很…

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

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

原型链补充

1.什么是原型对象 函数的独有属性,他用prototype来表示,可以在函数的prototype上挂载一些公用的属性和方法,供实例化对象来访问。 2.__proto__属性 这个属性每一个对象都有,实例化对象就是通过这个属性,来访问原型对象上的属性和方法的。 3.三者之间的关系 1.在构造函数的原型…

PTA——计算火车运行时间

本题要求根据火车的出发时间和达到时间&#xff0c;编写程序计算整个旅途所用的时间。 输入格式&#xff1a; 输入在一行中给出2个4位正整数&#xff0c;其间以空格分隔&#xff0c;分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数&#xff08;00-23&#xff0…

鸿蒙 DevEco Studio 3.1 入门指南

本文主要记录开发者入门&#xff0c;从软件安装到项目运行&#xff0c;以及后续的学习 1&#xff0c;配置开发环境 1.1 下载安装包 官网下载链接 点击立即下载找到对应版版本 下载完成&#xff0c;按照提示默认安装即可 1.2 下载SDK及工具链 运行已安装的DevEco Studio&…

SPI机制原理+使用

一、概述 SPI全称&#xff08;Service Provider Interface&#xff09;&#xff0c;是JDK内置的一种服务提供发现机制&#xff1b;SPI机制提供了组件发现和注册方式&#xff0c;可以为应用程序提供灵活的插件机制&#xff0c; 主要原理&#xff1a;接口 反射 配置文件。 二、…

Rust学习笔记002: 猜字游戏

version0.1 // 导入标准库中的 io 模块&#xff0c;它包含了输入输出相关的功能 use std::io;// 程序的入口点 fn main() {println!("Guess the number!");println!("Please input your guess.");// 创建一个可变的字符串变量 guess&#xff0c;用于存储用…

【Spring Security】快速入门之案例实操

目录 一、简介 1、什么是安全框架 2、主流的安全框架 3、为什么使用Spring Security 二、引言 1、什么是Spring Security 2、Spring Security工作原理 3、特点 三、快速入门 1、引入依赖 2、配置 3、启动测试 4、配置自定义账号密码 四、Web安全配置类 1.HttpSe…

智安网络|实现安全与网络功能一体化:SASE的全新安全策略

随着企业信息化和数字化程度的不断提升&#xff0c;网络安全面临着前所未有的挑战。传统的网络安全模式已经无法满足日益复杂的安全需求。在这一背景下&#xff0c;安全访问服务边缘&#xff08;SASE&#xff09;崭露头角&#xff0c;并逐渐成为新一代网络安全架构的关键概念。…