rust关联函数
在 Rust 中,关联函数(Associated Functions)是指那些定义在
impl 块中、且属于某个特定类型的函数。如果用面向对象的语言(如 Java、Python、C++)来类比,它非常类似于静态方法(Static Methods)。
通过以下四个核心要点,你可以快速掌握关联函数:
1. 核心特征:没有 self 参数
关联函数与普通方法的唯一区别,就是它的第一个参数不是
&self、&mut self 或 self。- 方法(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 权威指南》
浙公网安备 33010602011771号