【Rust】函数

目录

思维导图

1. 函数的基本概念

1.1 函数的定义

2. 参数的使用

2.1 单个参数的示例

2.2 多个参数的示例

3. 语句与表达式

3.1 语句与表达式的区别

3.2 示例

4. 带返回值的函数

4.1 返回值的示例

4.2 返回值与表达式

5. 错误处理

5.1 错误示例


思维导图

1. 函数的基本概念

        Rust语言中,函数是代码中常见的构造,主要用于组织和复用代码。main函数是大多数程序的入口点,并引入了fn关键字用于定义新函数。

1.1 函数的定义

  • 定义方式:通过fn关键字后接函数名和一对括号来定义函数。
  • 代码示例
    fn main() {println!("Hello, world!");another_function();
    }
    fn your_function() {println!("Your function.");
    }
    
  • 调用函数:可以在main函数内调用其他已定义的函数,如your_function

2. 参数的使用

        Rust允许函数定义参数,参数是函数签名的特殊变量,允许向函数传递具体的值。

2.1 单个参数的示例

  • 代码示例
    fn main() {your_function(5);
    }
    fn your_function(x: i32) {println!("The value of x is: {x}");
    }
    
  • 输出:运行后将打印The value of x is: 5

2.2 多个参数的示例

  • 代码示例
    fn main() {print_multiparameter(5, 'h');
    }
    fn print_multiparameter(value: i32, unit_label: char) {println!("The result is: {value}{unit_label}");
    }
    
  • 输出:运行后将打印The result is: 5h

3. 语句与表达式

        Rust语言中,函数体由一系列语句组成,这些语句可以选择性地以表达式结束。

3.1 语句与表达式的区别

  • 语句:执行某个操作但不返回值,例如变量声明。
  • 表达式:计算并返回值,例如数学运算5 + 6

3.2 示例

  • 代码示例
    fn main() {let y = {let x = 3;x + 1};println!("The value of y is: {y}");
    }
    
  • 输出:将打印The value of y is: 4

4. 带返回值的函数

        函数可以返回值,返回值的类型需要在箭头->后声明。

4.1 返回值的示例

  • 代码示例
    fn num() -> i32 {6
    }
    fn main() {let x = num();println!("The value of x is: {x}");
    }
    
  • 输出:运行后将打印The value of x is: 6

4.2 返回值与表达式

  • 重要性:函数的返回值是函数体内最后一个表达式的值。
  • 示例
    fn add_one(x: i32) -> i32 {x + 1
    }
    
  • 注意:如果在返回值的表达式后加上分号,将导致错误,因为分号会将表达式变为语句,不再返回值。

5. 错误处理

        若在函数中不正确地使用分号,会导致类型不匹配的错误,编译器会给出相应的错误信息以帮助调试。

5.1 错误示例

  • 代码示例
    fn add_one(x: i32) -> i32 {x + 1; // 错误:这里不返回值
    }
    
  • 错误信息:编译器会提示 mismatched types即类型不匹配,因为函数声明期望返回 i32类型,但实际返回的是(),即unit类型。

tips:

  • 蛇形命名法;
  • 必须声明参数类型
  • 有返回值时,必须是表达式。

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

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

相关文章

Cython全教程2 多种定义方式

—— 本篇文章,主要讲述Cython中的四种定义关键字 全教程2 多种定义方式: 在Cython中,关于定义的关键字有四个,分别是: cdef、def、cpdef、DEF 一、cdef定义关键字 顾名思义,cdef关键字定义的是一个C函数…

Web开发(一)HTML5

Web开发(一)HTML5 写在前面 参考黑马程序员前端Web教程做的笔记,主要是想后面自己搭建网页玩。 这部分是前端HTML5CSS3移动web视频教程的HTML5部分。主要涉及到HTML的基础语法。 HTML基础 标签定义 HTML定义 HTML(HyperText Markup Lan…

Java-数据结构-栈与队列(常考面试题与单调栈)

在上一篇的学习中,我们学习了栈和队列的基本知识,以及它们对应都有哪些方法,在什么应用场景下如何使用,并且还对它们进行了模拟实现,而其实对于栈和队列的相关知识还远不止于此,而今天我们就对栈与队列进行…

Spring 项目 基于 Tomcat容器进行部署

文章目录 一、前置知识二、本地Idea运行Spring项目1. 将写好的 Spring 项目先打包成 war 包2. 查看项目工件(Artifact)是否存在3. 配置 Tomcat3.1 添加一个本地 Tomcat 容器3.2 将项目部署到 Tomcat 4. 运行项目 三、基于 Tomcat 部署及多实例部署1. Spr…

usbredir学习

文章目录 背景典型场景编译usbredirparserusbredirfilterusbredirparser/usbredirproto usbredirhostusbredirect/usbredirtestclient参考 背景 usbredir 是一种用于通过网络转发 USB 设备流量的网络协议。它也是一个软件包的名称,该软件包提供了一个解析库、一个 …

ESXI 安装教程(3) ---​vCenter Server 安装

不涉及复杂的操作此项可不安装 1.镜像加载到虚拟光盘 对应的网盘文件 2.打开文件路径 双击运行文件installer.exe 3.调整安装语言 4.点击安装 5. 6. 证书,有效问题导致此提示,非专业网络管理人员,不知道如何处理,此处点是即可 证书有效开始时间是安装时间8小时 证书有效结束…

极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案

作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

【集成学习】Boosting算法详解

文章目录 1. 集成学习概述2. Boosting算法详解3. Gradient Boosting算法详解3.1 基本思想3.2 公式推导 4. Python实现 1. 集成学习概述 集成学习(Ensemble Learning)是一种通过结合多个模型的预测结果来提高整体预测性能的技术。相比于单个模型&#xf…

小米vela系统(基于开源nuttx内核)——如何使用信号量进行PV操作

如何使用信号量进行PV操作 前言信号量1. 信号量简介2. NuttX中信号量的创建与使用2.1 Nuttx信号量的初始化和销毁2.2 信号量的等待和发布 3. 信号量的实际应用:下载任务示例3.1 实际代码3.2 代码说明3.3 执行说明 4. 信号量的优势与应用场景5. 常见应用场景&#xf…

CMake学习笔记(2)

1. 嵌套的CMake 如果项目很大,或者项目中有很多的源码目录,在通过CMake管理项目的时候如果只使用一个CMakeLists.txt,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个CMakeLists.txt文件&#xff…

【C++】size_t究竟是什么?全面解析与深入拓展

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、什么是size_t?为什么需要size_t? 💯二、size_t的特性与用途1. size_t是无符号类型示例: 2. size_t的跨平台适应性示例对…

【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程

有问题请留言或私信 步骤 下载项目源码:项目源码 解压项目源码到本地 打开IDEA 左上角:文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件,点击确定,根据图示步骤继续导入项目 查看项目目录&#xff…

ssh2-sftp-client和ssh2配合使用js脚本快速部署项目到服务器

有时候因为服务器不能实现github或者gitlab的自动部署服务,所以就需要使用脚本来实现自动部署,可以省时省力,一劳永逸。这里就使用ssh2-sftp-client和ssh2来实现,即便是需要sudo权限,也是可以的。 1.先将本地打包后的…

深度解析Linux中的调试器gdb/cgdb的使用

Linux下我们编译好的代码,无法直接调试 gcc/g默认的工作模式是realse模式 程序要调试的话,必须是debug模式,也就是说编译的时候要加-g选项 gdb携带调试信息的exe 我们现在在文件夹里面创建一个文件lesson11 里面创建一个累加的代码&…

【Maui】动态菜单实现(绑定数据视图)

前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款开放源代码应用,是 X…

RNN之:LSTM 长短期记忆模型-结构-理论详解-及实战(Matlab向)

0.前言 递归!循环神经网络Recurrent Neural Network 循环神经网络(又称递归神经网络,Recurrent Neural Network,RNN)。是一种用于处理序列数据的神经网络结构,具有记忆功能,能够捕捉序列中的时…

泛目录和泛站有什么差别

啥是 SEO 泛目录? 咱先来说说 SEO 泛目录是啥。想象一下,你有一个巨大的图书馆,里面的书架上摆满了各种各样的书,每一本书都代表着一个网页。而 SEO 泛目录呢,就像是一个超级图书管理员,它的任务就是把这些…

【Vue】全局/局部组件使用流程(Vue2为例)

全局组件和局部组件区别 如何使用 全局组件:全局注册后,可以在任意页面中直接使用。局部组件:在页面中需要先导入子组件路径,注册组件才能使用。 适用场景 全局组件:适用于高频使用的组件,如导航栏、业…

【Pytorch实用教程】PyTorch 中如何输出模型参数:全面指南

文章目录 PyTorch 中如何输出模型参数:全面指南1. 为什么需要输出模型参数?2. PyTorch 中输出模型参数的方法2.1 使用 `model.parameters()` 输出所有参数2.2 使用 `model.named_parameters()` 输出参数名称和值2.3 使用 `model.state_dict()` 输出模型的参数字典2.4 输出特定…

1、docker概念和基本使用命令

docker概念 微服务:不再是以完整的物理机为基础的服务软件,而是借助于宿主机的性能。以小量的形式,单独部署的应用。 docker:是一个开源的应用容器引擎,基于go语言开发的,使用时apache2.0的协议。docker是…