🎈
快乐笔记 HappyNotes-综合基础科学学习笔记集
  • 前言
  • 计算机
    • 语言
      • 汇编
        • 基础
          • 概念
          • 指令集
        • x86
        • amd64
      • C
      • C++
      • Rust
        • 基础
          • 语法
            • 函数
            • 字面量
            • 流程控制
            • 闭包
            • 静态变量
            • 迭代器
            • 运算符
            • Result枚举
            • Option枚举
            • Page 17
            • Page 16
            • Page 9
          • 指针
          • 进程
          • 内存
          • 指针
          • 网络
          • 数学运算
          • 环境与配置
          • 工程组织管理
          • WASM
          • IO
          • FFI
            • 基础
            • 库
            • cbindgen
        • 标准库
      • Java
        • JDK
          • JUC
            • 基础
              • 基础
              • 相关链接
            • 集合
              • ConcurrentHashMap
              • 基础
      • Solidity
        • 基础
          • EIP标准
          • 可升级合约
          • 变量
          • 存储位置
          • 常量
        • 框架
          • OpenZeppelin
            • 基础
            • API
            • 常用操作
            • Page 19
          • UniSwap
          • PancakeSwap
        • 工具链
          • Hardhat
          • Truffle
        • IDE
          • Remix
      • Go
      • Javascript
      • Typrscript
      • Zig
      • Python
      • SQL
      • Lisp
      • 脚本
        • 正则表达式
        • bat
        • markdown
        • shell
        • toml
        • yaml
    • OS
      • 基础
        • 空间
      • Linux
        • 基础
        • 内核
        • 命名空间
        • 文件系统
        • 命令
        • 进程系统
        • 工具
        • 三方版本
          • Kali
            • metasploit
          • Ubantu
      • MacOS
      • Windows
      • 工具
        • make
        • netcat
    • 存储
      • 搜索引擎
        • OpenSearch
        • ZincSearch
      • 存储系统
        • IPFS
        • Etcd
      • 基础
      • 数据库
        • 工具
        • 区块链
        • 非关系型
        • 关系型
        • 列型
        • 图型
        • 数据仓库
    • 前端
    • 移动端
      • Android
      • IOS
    • 区块链
      • 原理
      • Page 4
      • 公链架构
        • Ethereum
          • 基础
            • 交易
            • Page 15
            • Page 14
            • Page 13
            • Page 12
          • ETH2.0
            • 升级路线
            • 名词解释
            • Page 11
            • Page 10
          • 节点
          • 链桥
          • Page 8
          • Page 7
          • Page 6
        • Page 5
      • 存储架构
      • L2架构
      • Defi
      • 工具
      • Page 2
      • Page 1
      • Page
      • Page 3
    • 文件系统
      • 基础
      • NTFS
    • 系统架构
      • cex-架构
      • 仓储系统
    • 中间件
      • Web3
        • Moralis
      • 搜索
        • Algolia
      • AI
      • Consul
      • FFmpeg
      • MeiliSearch
      • 运维
        • K8s
          • 基础
          • 命令
    • 协议
      • RTMP
    • 密码学
    • 数据结构
    • 算法
    • 编译器
      • LLVM
    • 服务器
      • JBoss
      • Jetty
      • Nginx
      • Tomcat
      • Underow
    • 名词解释
    • 硬件
    • 信息论
    • 网络
    • 容器
    • AI
    • 内存
    • 安全
    • 分布式
    • 工具
      • Git
  • 基础科学
    • 电子信息
      • 模拟电路
      • 数字电路
      • 信号
    • 物理
    • 化学
    • 机械
      • 汽车
      • 发动机
      • 发射装置
      • 飞行器
      • 火箭
    • 金融
      • 基础
        • 劣后与优先
        • VIE架构
      • 技术指标
        • 斐波那契回撤
        • 蜡烛图(OHLC)
        • 贝塔系数
        • 斐波那契速度阻力扇
        • 斐波那契趋势时间
        • 斐波那契速度阻力弧
        • 斐波那契楔形
        • 斐波那契圈
        • 斐波那契时区
      • 债务理论
    • 数学
      • 基础
        • 概念
        • 规范
        • 数
        • 运算
          • 四则运算
          • 解析式
          • 幂运算
          • 因数分解
      • 代数
      • 方程
        • 二元一次方程
        • 一元二次方程
        • 分式方程
        • 不等式
        • 一次函数
        • 二次函数
        • 三元一次方程
        • 三角函数
        • 一元一次方程
        • 反比例函数
      • 概率与统计
      • 高等数学
      • 工具
    • 易经
      • 爻卦
  • 法律
    • 公司法
    • 管制刀具认定标准
    • 物权法
    • 刑法
    • 知识产权法
  • 人类语言
Powered by GitBook
On this page
  • 概述
  • 格式
  • 基本知识
  • 函数屏蔽
  • 函数参数模式匹配
  • 函数返回值
  • 泛型函数
  1. 计算机
  2. 语言
  3. Rust
  4. 基础
  5. 语法

函数

概述

函数在 Rust 语言中是普遍存在的。

格式

fn <函数名> ( <参数 参数名:数据类型> ) -> <返回值> { 
<函数体>
<返回值> // 注意不能有分号
}

其中 Rust 函数名称的命名风格是小写字母以下划线分割;

基本知识

对于一些重复执行的代码,可以将其定义成一个函数,方便调用。 函数 = 函数签名 + 函数体 按值传递的参数使用 mut 关键字

fn modify(mut v: Vec<u32>) -> Vec<u32> {
    v.push(42);
    v
}
fn main() {
    let v = vec![1, 2, 3];
    let v = modify(v);
    println!("v = {:?}", v);
}

按引用传递参数时的 mut 的用法

fn modify(v: &mut Vec<u32>) {
    v.push(42);
}
fn main() {
    let mut v = vec![1, 2, 3];
    modify(&mut v);
    println!("v = {:?}", v);
}

函数屏蔽

变量屏蔽(variable shadow):当声明变量绑定后,如果再次声明同名的变量绑定,则之前的变量绑定会被屏蔽。 函数不能多次定义:否则报错 error[E0428]: the name xxx is defined multiple times。 但是,可以通过显式地使用花括号将同名的函数分割到不同的作用域中。默认的函数定义只在当前作用域内有效,会屏蔽作用域外的同名函数。

fn f() {
    println!("1");
}
fn main() {
    f(); // 2
    {
        f(); // 3
        fn f() {
            println!("3");
        }
    }
    f(); // 2
    fn f() {
        println!("2");
    }
}

函数参数模式匹配

函数中的参数等价于一个隐式的 let 绑定,而 let 绑定本事是一个模式匹配的行为。所以函数参数也支持模式匹配。

#[derive(Debug)]
struct S {
    i: i32,
}
fn f(ref s: S) {
    println!("{:p}", s); // 需要 ref 修饰
    println!("{:?}", s);
}
fn main() {
    let s = S { i: 42 };
    f(s);
    // println!("{:?}", s);
}

函数返回值

Rust 中的函数只能有唯一的返回值。

没有返回值的情况,实际上相当于返回了一个单元值 ()。如果有多个返回值,可以使用元组类型来返回。

fn foo(x: isize, y: isize) -> (isize, isize) {
    (x + y, x - y)            // 可以使用 return 来返回。也可以不加分号,默认返回。
}
fn main() {
    let (a, b) = foo(5, 8);
    println!("a = {}, b = {}", a, b);  // a = 13, b = -3
}

泛型函数

通用类型支持。

use std::ops::Mul;
fn square<T: Mul<T, Output = T>>(x: T, y: T) -> T {
    x * y
}
fn main() {
    // println!("square(3, 6) = {}", square(3, 6)); // square(3, 6) = 18
    let a = square(37.2, 41.1); // f64
    let b = square::<u32>(10, 6); // 若使用 u32,则参数不能是负数,不能是浮点数
    let c = square::<f32>(16f32, 26.3); // 指定 f32 类型
}
Previous语法Next字面量

Last updated 1 year ago