惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

博客园 - PKICA

c++ unordered_map‌底层实现 单片机 MCU,嵌入式,MPU,DSP,FPGA,PLC 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 rust线程-std::thread::park和unpark 配合Builder实现轻量级的线程挂起与唤醒 rust自定义线程属性std::thread::Builder rust线程 rust高并发设计实践进阶 rust高并发设计实践 rust性能优化与安全边界 联合体union在rust和C语言中有什么区别 rust并发与异步编程 如何预防rust不良的代码设计总结 rust类型系统与零成本抽象 rust内存模型 告别大显存依赖!用 Rust 新一代深度学习框架 Burn 打造纯 CPU 文本分类推理引擎 rust类型系统标记 编译配置解答 git实用命令 rust底层设计理念值得注意的几个地方总结
rust关联函数
PKICA · 2026-07-23 · via 博客园 - PKICA

在 Rust 中,关联函数(Associated Functions)是指那些定义在 impl 块中、且属于某个特定类型的函数。

如果用面向对象的语言(如 Java、Python、C++)来类比,它非常类似于静态方法(Static Methods)。

通过以下四个核心要点,你可以快速掌握关联函数:

1. 核心特征:没有 self 参数

关联函数与普通方法的唯一区别,就是它的第一个参数不是 &self&mut selfself

  • 方法(Method):必须通过实例对象来调用(例如 cache.get()),因为它的第一个参数是 self
  • 关联函数(Associated Function):直接通过类型本身来调用,不需要创建实例对象。

2. 最常见的应用场景:构造函数

Rust 语言本身没有像 Java 那样的 constructor 关键字,也没有传统的类构造器。Rust 约定俗成地使用关联函数来充当构造函数,最常见的就是 new

struct User {
    username: String,
    score: u32,
}

impl User {
    // 这是一个【关联函数】,因为它没有 self 参数 [1]
    // 作用:充当构造函数,用来初始化并返回一个 User 实例
    pub fn new(name: String) -> Self {
        User {
            username: name,
            score: 0,
        }
    }
}

3. 调用语法:双冒号 ::

调用关联函数时,使用的是路径限定符(双冒号 ::),而不是点号 .

fn main() {
    // 使用【类型名::函数名】来调用关联函数 [1]
    let player = User::new(String::from("Alice")); 
    
    // 错误示例:player.new(...) ── 这样写会报错,因为 new 不是方法
}

4. 关联函数 vs 方法(同场对比)

一个 impl 块里可以同时存在关联函数和方法:

impl User {
    // 1. 关联函数(没有 self):用于创建实例 [1]
    pub fn create_admin() -> Self {
        User { username: String::from("Admin"), score: 100 }
    }

    // 2. 方法(有 self):用于操作已经创建好的实例
    pub fn upgrade_score(&mut self) {
        self.score += 10;
    }
}

fn main() {
    // 调用关联函数创建对象
    let mut admin = User::create_admin();
    
    // 调用方法修改对象数据
    admin.upgrade_score(); 
}

参考资料:

《Rust 权威指南》