Rust——impl是什么意思

你这个问题非常关键,impl 是 Rust 里**从"写函数"升级到"写结构能力"**的核心语法。

我直接讲清楚,不绕。


一、impl 是什么?

✅ 一句话定义

👉 impl = implementation(实现)

👉 用来给某个类型(type)定义方法(methods)


二、看你这段代码在干什么

复制代码
impl Solution {
    pub fn merge(...) {
        ...
    }
}

👉 翻译成人话:

给 Solution 这个类型,定义一个叫 merge 的方法


三、类比你熟悉的 Java(非常重要)

Java 写法:

复制代码
class Solution {
    public void merge(...) {
        ...
    }
}

Rust 写法:

复制代码
struct Solution;

impl Solution {
    pub fn merge(...) {
        ...
    }
}

🎯 核心区别

Java Rust
类里写方法 用 impl 块写方法
class struct
方法属于类 方法属于类型(impl 绑定)

四、为什么 Rust 要这样设计?

Rust 没有传统 OOP 的"类(class)",而是:

👉 数据(struct) + 行为(impl)分离


🧠 你可以这样理解

复制代码
struct Solution;   // 定义数据(哪怕是空的)

impl Solution {    // 给它加功能
    fn merge() {}
}

👉 这就是 Rust 的"类"


五、你的这段代码有个隐藏点(重点)

复制代码
pub fn merge(nums1: &mut Vec<i32>, ...)

你会发现:

👉 没有 self


✅ 说明什么?

👉 这是一个静态方法(static method)


类比 Java

复制代码
class Solution {
    public static void merge(...) {
        ...
    }
}

六、如果有 self 就不一样了

复制代码
impl Solution {
    pub fn merge(&self) {
        // 实例方法
    }
}

👉 这才是"对象方法"


📌 三种常见写法

复制代码
fn foo(&self)        // 只读
fn foo(&mut self)    // 可修改
fn foo(self)         // 拿走所有权

七、再帮你拆一下你这段代码(加深理解)

复制代码
nums1.truncate(m as usize);

👉 截断 nums1 到 m 长度

复制代码
nums1.extend_from_slice(&nums2);

👉 把 nums2 拼进去

复制代码
nums1.sort();

👉 排序


👉 本质是:

先裁剪 → 再拼接 → 再排序(简单暴力解法)


八、总结(你必须记住的)

  • impl = 给类型加方法

  • Rust 没有 class,用 struct + impl

  • 没有 self → 静态方法

  • 有 self → 实例方法


🚀 下一步建议(你现在正好卡在关键点)

你接下来一定会遇到:

👉 &self、&mut self、self 到底区别是什么?

这个是 Rust 最核心的点(= 所有权 + 方法绑定)

你可以直接问我:

👉 "self 和 &mut self 本质区别是什么?"

我可以用 内存 + 指针 + Java 对比给你讲透,这一步过了你就进入中级了。

相关推荐
“AI国潮设计-小江”31 分钟前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
Song_RsHt35 分钟前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
学长毕设1 小时前
基于SpringBoot的建筑材料管理系统-附源码
java·spring boot·后端
程序员cxuan1 小时前
掀桌子了!Kimi K3.1 Pro 这效果也太离谱了。
人工智能·后端·程序员
lhbweilai1 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
努力努力再努力wz1 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
摸爬滚打的小李1 小时前
关于 Arthas
java·后端
咩咩啃树皮1 小时前
JavaScript 中 this 指向为什么总在变?
开发语言·前端·javascript
程序员清风1 小时前
算法题中的边界条件、测试与调试
开发语言·算法·kotlin
砚底藏山河2 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融