Rust学习笔记_11——函数

Rust学习笔记_08——String
Rust学习笔记_09——模式匹配
Rust学习笔记_10——守卫


函数


Rust语言中的函数是构成程序的基本模块,用于封装可重复使用的代码块。在Rust中,函数具有明确的结构和特性,这使得代码既强大又安全。

1. 函数定义

Rust中的函数使用fn关键字进行定义。

fn function_name(parameters) -> return_type {
    // 函数体
}


// fn:关键字,用于声明一个函数。
// function_name:函数的名称。
// parameters:函数的参数列表,使用圆括号括起来。如果没有参数,则可以为空。
// return_type:函数的返回类型。如果函数不返回任何值,则可以使用-> ()来表示空元组类型,即返回unit类型。
// 函数体:包含执行语句的代码块,用大括号{}括起来。

2. 示例

fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(5, 3);
    println!("The result is {}", result);
}

3. 函数同日中的表达式和语句

  1. 表达式:任何返回值的代码片段。在Rust中,如果函数体的最后一个表达式没有分号,它会被自动返回
  2. 语句:执行某种操作但不返回值的代码片段

4. 参数

4.1 必选参数
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(5, 3); // 调用函数时,必须提供a和b两个参数
    println!("The result is {}", result);
}
4.2 可选参数

在Rust中,可选参数通常通过标准库中的Option类型来实现。Option是一个枚举类型,它有两个变体:Some(T)None。当你想让一个参数在函数调用时是可选的时,你可以将该参数的类型设置为Option<T>

fn greet(name: Option<&str>) {
    match name {
        Some(n) => println!("Hello, {}!", n),
        None => println!("Hello, World!"),
    }
}

fn main() {
    greet(Some("Alice")); // 提供可选参数
    greet(None); // 不提供可选参数
}
4.3 参数默认值
fn greet_with_default(name: Option<&str>) {
    let name = name.unwrap_or("Guest"); // 如果name为None,则使用"Guest"作为默认值
    println!("Hello, {}!", name);
}

fn main() {
    greet_with_default(Some("Alice")); // 提供参数
    greet_with_default(None); // 不提供参数,使用默认值
}

5. 高阶函数

高阶函数是指接收函数作为参数或返回函数的函数。Rust提供了强大的支持来处理高阶函数

fn apply_operation(a: i32, b: i32, op: fn(i32, i32) -> i32) -> i32 {
    op(a, b)
}

fn main() {
    let result = apply_operation(5, 3, |x, y| x + y);
    println!("The result is {}", result);
}
### STM32F4 HAL库使用教程与资源获取 对于希望深入了解并掌握STM32F4系列微控制器HAL库使用的开发者而言,官方文档和社区贡献的指南都是不可或缺的学习材料。 #### 官方文档下载途径 STMicroelectronics官方网站提供了详尽的技术手册以及参考手册,这些资料不仅包含了关于硬件架构的信息,还深入介绍了软件开发环境下的各种API接口说明。访问官网的产品页面可以找到对应型号MCU的数据表、应用笔记等重要文件[^1]。 #### 中文使用指南推荐 考虑到部分用户可能更倾向于阅读中文版本的内容,《探索STM32F4xx HAL库:EXTI外设及函数使用中文指南》这份文档特别适合那些想要快速入门外部中断配置的朋友;而对于关注通用输入输出端口编程的人来说,则有专门针对GPIO模块编写的《STM32F4xx HAL库(GPIO外设及函数)中文使用指南》,这两份资料均经过精心翻译整理,能够有效降低理解难度[^2]。 #### 示例代码获取方式 除了理论性的介绍之外,实际案例同样非常重要。GitCode平台上存在多个开源项目可供借鉴,比如`b5d42`仓库内就收录了一系列有关于EXTI的应用实例,而`stm32f4xx-hal`则是面向整个STM32 F4家族成员的一个Rust语言实现版HAL层框架,在这里不仅可以学到传统C/C++风格的编码技巧,还能接触到现代嵌入式系统设计的新思路[^3]。 此外,还有具体的移植案例分享——从F407迁移到F427IIHx上的过程记录,其中涉及到了UART与CAN通信协议栈的相关调整细节,这对于计划开展相似工作的工程师来说具有很高的参考价值[^4]。 ```c // EXTI初始化示例代码片段 void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; /*Configure GPIO pin : PA0 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿触发中断 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值