【Rust】函数

news/2025/1/13 18:32:01/

目录

思维导图

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.ppmy.cn/news/1562861.html

相关文章

Go 中的单引号 (‘)、双引号 (“) 和反引号 (`)

在 Go 中,单引号 ()、双引号 (") 和反引号 () 都有不同的用途和含义,具体如下: 1. 单引号 () 单引号用于表示 字符字面量(单个字符)。在 Go 中,字符是一个单独的 Unicode 字符,并且它的类…

转运机器人在物流仓储行业的优势特点

在智能制造与智慧物流的浪潮中,一款革命性的产品正悄然改变着行业的面貌——富唯智能转运机器人,它以卓越的智能科技与创新的设计理念,引领着物流领域步入一个全新的高效、智能、无人的时代。 一、解放双手,重塑物流生态 富唯智能…

前端拿到zip中所有文件并下载为新的zip文件

问题原因:后端返回了一个zip格式文件供前端下载,然后下载后,形成了zip套zip的形式,当后端不愿处理时,前端不能坐以待毙 PS:当压缩包文件量过大,前端可能会出问题(脑测,未…

天天 AI-250110:今日热点-字节豆包Web端反超百度文心一言,DeepSeek也发力了|量子位智库月报

2AGI.NET:天天AI-20250109 人工智能(AI)和硬件技术继续以惊人的速度发展,不断刷新我们对技术边界的认知。从英伟达的RTX 50系列显卡到清华团队的数学推理突破,再到AI算力的多个利好,这些技术的发展正在推动…

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备,然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置,只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑,设备需解…

【Rust练习】27.Module

练习题来自:https://practice-zh.course.rs/crate-module/module.html 建议在命令行下操作完成本节内容,Windows 11/10 首选 Windows 终端,好看,支持渲染中文字体,缺点是功能太少了;其次推荐 mobaxterm&am…

Jaeger UI使用、采集应用API排除特定路径

Jaeger使用 注: Jaeger服务端版本为:jaegertracing/all-in-one-1.6.0 OpenTracing版本为:0.33.0,最后一个版本,停留在May 06, 2019。最好升级到OpenTelemetry。 Jaeger客户端版本为:jaeger-client-1.3.2。…

【pytorch】注意力机制-1

1 注意力提示 1.1 自主性的与非自主性的注意力提示 非自主性提示: 可以简单地使用参数化的全连接层,甚至是非参数化的最大汇聚层或平均汇聚层。 自主性提示 注意力机制与全连接层或汇聚层区别开来。在注意力机制的背景下,自主性提示被称为查…