当前位置: 首页 > news >正文

rust函数

一 、函数定义

(一)格式
使用fn关键字
fn是 function 的缩写
1.无返回值的

fn 函数名 ( [paraname: type]... ) {函数体
}

参数必须声明参数名称和类型
函数定义时指定的参数叫做 形参。调用时传递给函数的参数叫做 实参。

例子

fn another_function() {println!("Hello, runoob!");
}

2.有返回值的
(1)使用 return 关键字指定返回值

fn 函数名 ( [paraname: type]... ) -> 类型{return value;
}

(2)不使用return语句,而使用结尾表达式作为返回值
结尾表达式不能由分号 ; 结尾

function function_name() -> return_type {value
}

例子

fn main(){println!("pi value is {}",get_pi());println!("pi value is {}",get_pi2());
}
fn get_pi()->f64 {22.0/7.0
}
fn get_pi2()->f64 {return 22.0/7.0;
}
编译运行结果如下
pi value is 3.142857142857143
pi value is 3.142857142857143

(二)语句和表达式
函数体由一系列的语句和一个可选的结尾表达式构成

Rust区分语句与表达式,其他语言并没有这样的区别。
语句(Statements)是执行一些操作但没有返回值的指令。
表达式(Expressions)计算并产生一个返回值。
语句与表达式的一个区别是语句以分号结尾,而表达式没有分号。

下列是语句
let y = 6;
函数定义是语句。

以下是表达式
7
b + 2
函数调用是一个表达式。
宏调用是一个表达式。
用大括号创建的一个块作用域也是一个表达式,例如:

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

其中

{let x = 3;x + 1
}

就是一个表达式。
注意 x+1 这一行在结尾没有分号。表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句。

二、函数使用

(一)
语法格式

function_name(val1, val2, valN);

例子

fn main(){fn_hello();
}
fn fn_hello(){println!("hello from function fn_hello ");
}

(二)传递参数
有两种传递参数的方法,一种是把值直接传递给函数,另一种是把值的内存地址传递给函数。
1.值传递
就是把形参变量赋值为传递的值。因为是赋值,所以形参和实参各自保存了相同的值,互不影响。
范例

fn main(){let no:i32 = 5;mutate_no_to_zero(no);println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(mut param_no: i32) {param_no = param_no*0;println!("param_no value is :{}",param_no);
}
编译运行结果如下
param_no value is :0
The value of no is:5

2.引用传递
把当前变量的内存地址传递给函数。实参和形参都共同指向了同一个内存地址。
语法格式如下

fn function_name(parameter: &data_type) {
}

范例

fn main() {let mut no:i32 = 5;mutate_no_to_zero(&mut no);println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(param_no:&mut i32){*param_no = 0; //解引用操作
}
编译运行结果如下
The value of no is 0.

(三)函数作为参数
在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);
}

相关文章:

rust函数

一 、函数定义 (一)格式 使用fn关键字 fn是 function 的缩写 1.无返回值的 fn 函数名 ( [paraname: type]... ) {函数体 }参数必须声明参数名称和类型 函数定义时指定的参数叫做 形参。调用时传递给函数的参数叫做 实参。 例子 fn another_function(…...

链表的基本操作

(一)实验类型:设计性 (二)实验目的: 1. 掌握线性表的链式存贮结构及基本操作,深入了解链表的基本特性,以便在实际问题背景下灵活运用它们。 2. 巩固该存贮结构的构造方法&#xff0…...

Flutter AI五子棋

前言 在上一篇文章中,讲解了如何实现双人在本地对战的五子棋,但是只有一个人的时候就不太好玩,同时博主也没有把五子棋相关的文章写过瘾。那么这篇文章,我们来实现一个功能更加丰富的五子棋吧!在设计五子棋的算法方面&…...

springboot项目中后台文件上传处理

参考地址:http://www.gxcode.top/code 文件上次核心处理代码: @Autowired private FileUpload fileUpload; //获取资源对象:file-upload-prod.properties@ApiOperation(value = "用户头像修改", notes = "用户头像修改", httpMethod =...

【SQL】MySQL中的存储引擎、事务、锁、日志

存储引擎: 数据库管理系统(DBMS)使用数据存储引擎进行创建、查询、更新和删除数据。 MySQL5.5之前默认的存储引擎是MyISAM,5.5及之后版本默认的存储引擎是InnoDB。(my.ini中指定的) MyISAM:不支持事务,不支…...

DRM全解析 —— CRTC详解(2)

接前一篇文章:DRM全解析 —— CRTC详解(1) 本文继续对DRM中CRTC的核心结构struct drm_crtc的成员进行释义。 3. drm_crtc结构释义 (5)struct drm_modeset_lock mutex /*** @mutex:** This provides a read lock for the overall CRTC state (mode, dpms* state, ...) an…...

3d环形图开发(vue3+vite+ts)

开发效果&#xff08;待完善&#xff09;&#xff1a; 技术支持&#xff1a; Echarts echarts-gl 安装&#xff1a; 注&#xff1a;echarts与echarts-gl版本需对应&#xff0c;可参考官网 pnpm add echarts4.9.0 echarts-gl1.1.2 组件封装&#xff1a; <template><…...

element ui中父子组件共用一个el-dialog弹窗,切换组件页面弹窗进行关闭

在Element UI中&#xff0c;如果多个父子组件共用一个el-dialog弹窗&#xff0c;并且需要在切换组件页面时关闭弹窗&#xff0c;你可以考虑以下方法来实现&#xff1a; 使用Vuex进行状态管理&#xff1a; 在Vuex中创建一个状态来管理弹窗的显示状态&#xff08;例如&#xff0…...

基于Keil a51汇编 —— Segments, Modules, and Programs

段、模块和程序 在初始设计阶段&#xff0c;定义程序要执行的任务&#xff0c;然后划分为子程序。以下是与 Ax51 汇编器和 Lx51 链接器/定位器一起使用的子程序类型的简要介绍。 段是代码块或数据存储器。段可以是可重定位的&#xff0c;也可以是绝对的。可重定位段具有名称、…...

基于Java+SpringBoot+Vue民宿管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

【Qt】三种方式实现抽奖小游戏

简介 本文章是基本Qt与C实现一个抽奖小游戏&#xff0c;用到的知识点在此前发布的几篇文章。 下面是跳转链接&#xff1a; 【Qt控件之QLabel】用法及技巧链接&#xff1a; https://blog.csdn.net/MrHHHHHH/article/details/133691441?spm1001.2014.3001.5501 【Qt控件之QPus…...

【算法与数据结构】--算法基础--算法设计与分析

一、贪心算法 贪心算法是一种解决优化问题的算法设计方法&#xff0c;其核心思想是在每一步选择当前状态下的最优解&#xff0c;从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤&#xff0c;并提供C#和Java的实现示例。 1.1 原理&#xff1a; 贪心算法的原…...

vue部分入门知识点代码示例

1. Vue实例 Vue.js的核心是Vue实例&#xff0c;用来管理你的应用。以下是一个创建Vue实例的示例&#xff1a; <!DOCTYPE html> <html> <head><title>Vue.js入门示例</title><!-- 引入Vue.js库 --><script src"https://cdn.jsdel…...

【图灵】Spring为什么要用三级缓存解决循环依赖问题

这里写自定义目录标题 一、什么是循环依赖二、什么是单例池&#xff1f;什么是一级缓存&#xff1f;三、什么是二级缓存&#xff0c;它的作用是什么&#xff1f;四、什么是三级缓存&#xff0c;它的作用是什么&#xff1f;五、为什么Spring一定要使用三级缓存来解决循环依赖六、…...

bert入门

bert是什么 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种自然语言处理&#xff08;NLP&#xff09;中的预训练模型&#xff0c;它是基于Transformer架构的一种深度学习模型。BERT的主要目标是在大规模文本语料库上进行预训练&a…...

蓝桥杯基础---切面条

切面条 一根高筋拉面&#xff0c;中间切一刀&#xff0c;可以得到2根面条。 如果先对折1次&#xff0c;中间切一刀&#xff0c;可以得到3根面条。 如果连续对折2次&#xff0c;中间切一刀&#xff0c;可以得到5根面条。 那么&#xff0c;连续对折10次&#xff0c;中间切一刀…...

Spring Data Redis使用方式

1.导入Spring Data Redis的maven坐标 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2. 配置Redis数据源 2.1application.yml文件…...

HarmonyOS/OpenHarmony原生应用开发-华为Serverless认证服务说明(二)

一、支持HarmonyOS(Stage模型-API9)应用的账户注册登录方式 文档中的TS作者认为就是ArkTS之意。暂时支持四种模式&#xff0c;手机、邮箱、匿名、自有账户。 二、暂时不支持HarmonyOS(Stage模型-API9)应用的账户注册登录方式 包括华为账户注册登录&#xff0c;HarmonyOS…...

华为数通方向HCIP-DataCom H12-831题库(多选题:241-259)

第241题 设备产生的信息可以向多个方向输出信息,为了便于各个方向信息的输出控制,信息中心定义了10条信息通道,使通道之间独立输出,缺省情况下,以下哪些通道对应的输出方向可以接收Trap信息? A、console通道 B、logbuffer通道 C、snmpagent通道 D、trapbuffer通道 答案:…...

深度学习在 NumPy、TensorFlow 和 PyTorch 中实现所有损失函数

目录 一、说明 二、内容提示 三、均方误差 (MSE) 损失 3.1 NumPy 中的实现 3.2 在 TensorFlow 中的实现 3.3 在 PyTorch 中的实现 四、二元交叉熵损失 4.1 NumPy 中的实现 4.2 在 TensorFlow 中的实现 4.3 在 PyTorch 中的实现 五、加权二元交叉熵损失 5.1 分类交叉熵损失 5.2 …...

Cursor AI代码助手:重塑IDE开发体验,从智能补全到项目级协作

1. 项目概述&#xff1a;当AI代码助手遇上IDE&#xff0c;Cursor如何重塑开发体验 如果你是一名开发者&#xff0c;最近一定在圈子里频繁听到“Cursor”这个名字。它不是一个全新的编程语言&#xff0c;也不是一个颠覆性的框架&#xff0c;但它却实实在在地在改变着许多人的编码…...

Python统一调用多AI模型:python-tgpt库实战指南

1. 项目概述&#xff1a;一个让Python与AI对话更简单的工具 如果你最近在尝试用Python调用各种大语言模型&#xff08;LLM&#xff09;的API&#xff0c;比如OpenAI的GPT、Google的Gemini&#xff0c;或者开源的Llama、Mistral&#xff0c;那你大概率经历过这样的场景&#xf…...

Python一键打包exe

链接&#xff1a;https://pan.quark.cn/s/a5759c489d72...

全栈开发真的是万能解药吗?3年全栈开发者的血泪教训

一、从测试视角看全栈热&#xff1a;光环下的误解作为软件测试从业者&#xff0c;你一定不止一次在行业论坛、招聘启事里看到“全栈开发”这四个字。它像一个自带聚光灯的概念&#xff0c;被描绘成能独当一面解决所有技术问题的“万能解药”——前端页面布局、后端逻辑搭建、数…...

AI与地缘政治双重冲击下,内存市场产能大迁移与供应链危机

1. 风暴之眼&#xff1a;当AI狂潮撞上地缘断供如果你最近想给电脑加条内存或者换个固态硬盘&#xff0c;大概率会被价格吓一跳。这不仅仅是简单的“涨价”&#xff0c;而是整个存储市场的底层逻辑正在被两股巨力彻底重塑。一边是AI数据中心对高性能内存近乎贪婪的吞噬&#xff…...

Godot 4 Steam联机插件:无缝替换ENet,快速接入Steam网络服务

1. 项目概述&#xff1a;一个为Godot 4游戏引擎设计的Steam多人联机插件 如果你正在用Godot 4开发一款PC端的多人游戏&#xff0c;并且希望它能通过Steam平台顺畅地联机对战&#xff0c;那么你很可能已经遇到了一个核心难题&#xff1a;如何将Godot内置的网络模块与Steam的联机…...

PyTorch/TensorFlow深度学习环境搭建:在Windows10上一步到位搞定CUDA和cuDNN(避坑合集)

PyTorch/TensorFlow深度学习环境搭建&#xff1a;在Windows10上一步到位搞定CUDA和cuDNN&#xff08;避坑合集&#xff09; 刚入坑深度学习的开发者&#xff0c;最头疼的莫过于环境配置。明明按照教程一步步安装了PyTorch或TensorFlow&#xff0c;却在代码运行时看到CUDA不可用…...

100GbE技术演进:背板PAM4与光模块25G的路线之争

1. 高速以太网技术演进中的十字路口&#xff1a;100GbE的“戏剧性”挑战在通信与网络设备、半导体设计与制造这个圈子里待久了&#xff0c;你会发现技术标准的制定过程&#xff0c;其精彩程度丝毫不亚于一部精心编排的戏剧。尤其是当我们谈论到以太网&#xff0c;这个支撑起全球…...

SEM轮廓技术在22nm以下OPC建模中的创新应用

1. SEM轮廓技术在OPC建模中的革命性突破在22nm及以下节点的半导体制造工艺中&#xff0c;光学邻近效应校正&#xff08;OPC&#xff09;面临着前所未有的挑战。传统基于CD&#xff08;临界尺寸&#xff09;测量的建模方法在应对复杂2D结构时显得力不从心&#xff0c;特别是在处…...

3分钟掌握PC端聊天软件防撤回:RevokeMsgPatcher实战指南

3分钟掌握PC端聊天软件防撤回&#xff1a;RevokeMsgPatcher实战指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.…...