Rust编程的函数

【图书介绍】《Rust编程与项目实战》-CSDN博客

《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)

Rust编程与项目实战_夏天又到了的博客-CSDN博客

7.1  函 数 定 义

在Rust中,函数使用fn关键字定义,后跟函数名、参数列表、返回类型和函数体。函数体由一系列语句组成,用于执行特定的操作和计算。以下是一个简单的函数示例:

fn greet() {println!("Hello, Rust!");
}
fn main() {greet();
}

上述示例中,我们定义了一个名为greet的函数,它不接收任何参数,也没有返回值。函数体中的语句println!("Hello, Rust!")用于打印一条问候信息。在main函数中,我们调用了greet函数,通过函数名后加上圆括号“()”来调用函数。

7.2  函 数 参 数

函数可以接收参数,参数是函数的输入数据,用于在函数体中进行处理和操作。在Rust中,函数的参数由参数名和类型组成,并通过逗号分隔。以下是一个带有参数的函数示例:

fn greet(name: &str) {println!("Hello, {}!", name);
}fn main() {let name = "Alice";greet(name);
}

在上述示例中,我们定义了一个名为greet的函数,它接收一个类型为&str的参数name。参数类型&str表示一个字符串切片,它是对字符串的引用。

在main函数中,我们定义了一个名为name的变量,并将其赋值为"Alice"。然后,我们将name作为参数传递给greet函数,以打印问候信息。

7.3  函数返回值

函数可以返回一个值,返回值是函数的输出结果,用于提供函数执行后的结果或计算的值。在Rust中,函数的返回类型由->符号后跟类型来指定。以下是一个带有返回值的函数示例:

fn add(a: i32, b: i32) -> i32 {a + b
}fn main() {let result = add(3, 5);println!("Result: {}", result);
}

在上述示例中,我们定义了一个名为add的函数,它接收两个参数a和b,类型均为i32。函数体中的表达式a + b表示将参数a和b相加,并作为函数的返回值。

在main函数中,我们调用了add函数,并将返回值存储在result变量中。然后,使用println!宏打印出结果。结果输出:Result: 8。

7.4  函 数 重 载

Rust不支持传统意义上的函数重载,即在同一作用域中定义多个同名函数但参数类型或数量不同的情况。然而,Rust通过使用泛型和trait来实现类似的功能。以下是一个使用泛型和trait实现函数重载的示例:

trait Add {type Output;fn add(self, other: Self) -> Self::Output;
}impl Add for i32 {type Output = i32;fn add(self, other: Self) -> Self::Output {self + other}
}impl Add for f64 {type Output = f64;fn add(self, other: Self) -> Self::Output {self + other}
}fn main() {let a = 3;let b = 5;let c = 2.5;let d = 4.8;let result1 = a.add(b);let result2 = c.add(d);println!("Result 1: {}", result1);println!("Result 2: {}", result2);
}

    println!("Result 1: {}", result1);

    println!("Result 2: {}", result2);

}

在上述示例中,我们定义了一个名为Add的trait,它具有一个关联类型Output和一个add方法。然后,为i32和f64类型分别实现了Add trait,为它们提供了不同的实现方式。

在main函数中,我们分别定义了a、b、c和d四个变量,并使用add方法对它们进行相加操作。根据变量的类型,编译器会自动选择正确的实现方式。运行结果如下:

Result 1: 8
Result 2: 7.3

7.5  函数作为参数和返回值

在Rust中,函数可以作为参数传递给其他函数,也可以作为函数的返回值。这种特性可以实现函数的灵活组合和高阶函数的编写。以下是一个函数作为参数和返回值的示例:

fn add(a: i32, b: i32) -> i32 {a + b
}fn subtract(a: i32, b: i32) -> i32 {a - b
}fn calculate(op: fn(i32, i32) -> i32, a: i32, b: i32) -> i32 {op(a, b)
}fn main() {let result1 = calculate(add, 3, 5);let result2 = calculate(subtract, 8, 4);println!("Result 1: {}", result1);println!("Result 2: {}", result2);
}

在上述示例中,我们定义了两个简单的函数add和subtract,分别用于相加和相减操作。

然后,我们定义了一个名为calculate的函数,它接收一个函数参数op,类型为fn(i32, i32) -> i32,表示接收两个i32类型的参数并返回i32类型结果。在函数体中,我们调用了op函数,并传递了a和b作为参数。

在main函数中,我们分别使用add和subtract作为calculate函数的参数,并打印出计算结果。运行结果如下:

Result 1: 8
Result 2: 4

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

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

相关文章

干货资料速来领取!!

关于【中国ICD行业 PLM市场研究报告】: 作为电子产业的工业粮食,ICD(集成电路设计)是一个高度专业化的领域,当前已广泛应用于计算机、通信、消费电子、汽车、医疗设备等多个行业。 近年来,国家发布多项积极政策,助推行业快速发展来提升自主可控技术及国际市场竞争力,…

数字创意的孵化器:西安园区打造创意产业生态圈

在数字创意蓬勃发展的时代浪潮中,西安犹如一颗闪耀的新星,凭借着独特的园区建设,为数字创意产业注入无限活力。其中,西安数字创意孵化园区正发挥着不可替代的重要作用,尤其是西安国际数字影像产业园,更是成…

卡门涡街,大自然的诗意律动

1959年8月14日,人类拍摄了地球的首张卫星图像。半个多世纪后,地球已经被上万颗卫星环绕,传回的自拍也越来越清晰。2009年,美国宇航局对过去50年的地球卫星图进行评选,排第一名的是这一张,太平洋上的风流过阿…

面试还搞不懂redis,快看看这40道面试题

Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类…

食品研发PLM系统是什么?三品PLM食品行业解决方案详情介绍

在快速变化的食品行业中,企业面临着诸多挑战,特别是在产品研发管理方面。随着消费者对食品品质、健康、创新等方面需求的不断提升,食品企业必须在产品研发上不断创新,以满足市场需求。然而,这一过程中,食品…

数据分布过于集中 怎么办,python 人工智能 ,数据分析,机器学习pytorch tensorflow ,

数据分布过于集中,意味着数据的大部分值都聚集在某个特定区间内,这可能会导致统计分析的结果不够稳健,或者模型训练时出现过拟合等问题。针对这种情况,可以考虑以下几种方法来处理: 变换成 1. **数据转换**&#xff1…

服装生产管理的现代化:SpringBoot框架

2 关键技术简介 2.1 JAVA技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译&#xff0…

ssm某物流企业管理信息系统-计算机毕业设计源码82788

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

Windows下MYSQL8.0如何恢复root权限

误操作把root权限清掉导致数据库无法登录(确实很难受),在网上找了很多方法,发现没有很行之有效的方法,在多方尝试终于找到了适合敏感宝宝体质的方法。 C:\Users\Administrator>mysql -u root -P3307 ERROR 1045 (2…

《征服数据结构》并查集(DSU)

摘要: 1,并查集的介绍 2,并查集的查找 3,并查集的合并 1,并查集的介绍 并查集(Disjoint-set data structure,不交集数据结构)是用于处理一些不交集的合并以及查询问题,它是非常重要的一种数据结…

【开源】RISC-V 修改neofetch中的Host描述

neofetch 介绍 neofetch 是一款用于在终端中显示系统信息的工具,其主要特点是以美观的方式展示宿主机的基本信息。它通常用于展示系统的分发版本、内核版本、硬件信息、桌面环境,以及一些个性化的设置,配合 ASCII 艺术风格的 logo&#xff0…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第三十章 文件IO和标准IO

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

【杭州马拉松:挑战自我,突破极限的征程】

2024年11月3日,杭州马拉松如约而至。这场挑战自我,突破极限的征程,将在杭州这座美丽的城市揭开序幕。对于广大跑步爱好者来说,如何选择合适的装备参加马拉松,成为了备战的重中之重。 在这里,我要向大家推荐…

2024咸宁中、初级职称申报时间是什么时候?

根据省职改办《关于做好2023年度全省职称评审工作的通知》(鄂职改办〔2024〕16号)、市职改办《关于做好2024年度咸宁市专业技术职务任职资格评审工作有关事项的通知》(咸职改办〔2024〕11号)等文件精神,现就开展2024年…

Anaconda简介windows安装

Anaconda Anaconda简介1.下载anaconda2.安装anaconda3.验证是否安装成功4.运行Anaconda简介 Anaconda是一个Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,它是科学计算领域非常流行的Python包以及集成环境管理的应用。它的优势主要表现在以下几个方面: …

SSM志愿服务管理系统-计算机毕业设计源码64777

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 志愿服务管理系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用…

Python酷库之旅-第三方库Pandas(142)

目录 一、用法精讲 641、pandas.Timestamp.hour属性 641-1、语法 641-2、参数 641-3、功能 641-4、返回值 641-5、说明 641-6、用法 641-6-1、数据准备 641-6-2、代码示例 641-6-3、结果输出 642、pandas.Timestamp.is_leap_year属性 642-1、语法 642-2、参数 6…

论文写作常用的七类辅助工具

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 论文写作过程中,以下七类常用的辅助工具,可以帮助提升效率、确保内容准确性、提高整体写作质量。 1. 文献管理工具 EndNote:用于管理参考文献&#…

ant-design-vue 可输入表格的校验方法

1、思路&#xff0c;首先用a-form包裹a-table&#xff0c;( 主要是name的取值问题&#xff0c;要严格按照[数据源,index,校验的字段]来) <a-form ref"form" :model"formData" :rules"rules"><a-table :dataSource"formData.table…

PRAI-International Journal of Pattern Recognition and Artificial Intelligence

文章目录 一、征稿简介二、重要信息三、服务简述四、投稿须知五、联系咨询 一、征稿简介 二、重要信息 期刊官网&#xff1a;https://ais.cn/u/3eEJNv 三、服务简述 模式识别 • 机器学习 • 深度学习 • 文件分析 • 图像处理 • 信号处理 • 计算机视觉 • 生物识别技术 •…