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

【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.kler.cn/a/501821.html

相关文章:

  • 图形验证码是怎样保护登录安全的?
  • .NET framework、Core和Standard都是什么?
  • 在 Azure 100 学生订阅中新建一台 Ubuntu VPS,并通过 Docker 部署 Nginx 服务器
  • 零基础 监控数据可视化 Spring Boot 2.x(Actuator + Prometheus + Grafana手把手) (上)
  • 如何安装cnpm
  • Mysql 性能优化:覆盖索引
  • 【网络协议】EIGRP - 第二部分
  • 使用Deepseek搭建类Cursor编辑器
  • SQL语言的计算机基础
  • LeetCode:216.组合总和III
  • 基于单片机的书写坐姿规范提醒器的设计(论文+源码)
  • 自动化机械臂视觉跟踪和手眼校准
  • Docker Swarm、Kubernetes 和 LVS 的功能对比
  • Go语言如何实现高性能缓存服务
  • 青少年编程与数学 02-006 前端开发框架VUE 24课题、UI表单
  • virtual box虚拟机误删Python3.6后导致UBUNTU18.04开机无UI界面(进不了desktop)的解决方法
  • docker推送本地仓库报错
  • 2025年VGC大众汽车科技社招入职测评综合能力英语口语SHL历年真题汇总、考情分析
  • 嵌入式入门Day42
  • Centos8部署Redis Cluster
  • STM32——点亮LED
  • shell脚本回顾1
  • [文献精汇]使用 LSTM Networks 的均值回归交易策略
  • 2024年开发语言热度排名
  • ECharts实战:在UniApp中实现动态数据可视化
  • 奇迹mu1.03单机版安装教程+无需虚拟机+GM工具