Rust学习笔记_11——函数

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


函数

文章目录

    • 函数
      • [1. 函数定义](#1. 函数定义)
      • [2. 示例](#2. 示例)
      • [3. 函数同日中的表达式和语句](#3. 函数同日中的表达式和语句)
      • [4. 参数](#4. 参数)
        • [4.1 必选参数](#4.1 必选参数)
        • [4.2 可选参数](#4.2 可选参数)
        • [4.3 参数默认值](#4.3 参数默认值)
      • [5. 高阶函数](#5. 高阶函数)

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

1. 函数定义

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

rust 复制代码
fn function_name(parameters) -> return_type {
    // 函数体
}


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

2. 示例

rust 复制代码
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 必选参数
rust 复制代码
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>。

rust 复制代码
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 参数默认值
rust 复制代码
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提供了强大的支持来处理高阶函数

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);
}
相关推荐
希和202737 分钟前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
Linux-lucky1 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
li星野1 小时前
【学习记录】k-Wave 时间步长、CFL 稳定性与参数实验全解析
学习
一个人旅程~3 小时前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫4 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
派大猩猩_6 小时前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
Nerd(BUG版)7 小时前
Flutter学习day5--事件手势与命中测试
学习·flutter
Nerd(BUG版)8 小时前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin
東隅已逝,桑榆非晚8 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
wdyan2979 小时前
带着小白学习-微服务-5 实战:配置中心-数据库连接
数据库·学习·微服务