RUST impl <T> Wrapper <T>

在自己的 test/expriment 文件夹内,运行:

bash 复制代码
# 1. 创建一个新项目(名字叫 demo)
cargo new demo
cd demo

修改 main.rs 如下:

rust 复制代码
// 1. 定义一个泛型结构体 Wrapper<T>
// T 是泛型参数,可以代表任意类型
struct Wrapper<T> {
    value: T,
}

// 2. 为所有类型 T 实现**通用方法**(所有 T 都能用)
impl<T> Wrapper<T> {
    // 通用方法:获取内部值
    pub fn new(value: T) -> Self {
        Wrapper { value }
    }

    // 通用方法:返回内部值的引用
    pub fn get(&self) -> &T {
        &self.value
    }
}

// 3. 只为 Wrapper<String> 实现**专属方法**
impl Wrapper<String> {
    // 只有 String 类型才能调用这个方法
    pub fn to_uppercase(&self) -> String {
        self.value.to_uppercase()
    }

    // 只有 String 类型能用
    pub fn length(&self) -> usize {
        self.value.len()
    }
}

// 4. 只为 Wrapper<i32> 实现**专属方法**
impl Wrapper<i32> {
    // 只有 i32 类型才能调用
    pub fn double(&self) -> i32 {
        self.value * 2
    }

    pub fn is_positive(&self) -> bool {
        self.value > 0
    }
}

fn main() {
    // ========== 使用 String 版本 ==========
    let s_wrap = Wrapper::new(String::from("hello rust"));
    println!("原始字符串: {}", s_wrap.get());
    println!("大写: {}", s_wrap.to_uppercase()); // ✅ String 专属
    println!("长度: {}", s_wrap.length());      // ✅ String 专属

    // ========== 使用 i32 版本 ==========
    let i_wrap = Wrapper::new(10);
    println!("\n原始数字: {}", i_wrap.get());
    println!("翻倍: {}", i_wrap.double());      // ✅ i32 专属
    println!("是否正数: {}", i_wrap.is_positive()); // ✅ i32 专属

    // 通用方法所有类型都能用
    let b_wrap = Wrapper::new(true);
    println!("\n布尔值: {}", b_wrap.get());
}

在终端运行:

bash 复制代码
# 2. 打开 src/main.rs 文件,把里面内容全删掉,替换成我给你的完整代码
# 3. 运行
cargo run

预期输出:

复制代码
原始字符串: hello rust
大写: HELLO RUST
长度: 10

原始数字: 10
翻倍: 20
是否正数: true

布尔值: true
相关推荐
坚果派·白晓明8 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
码力斜杠哥16 小时前
Rust初习录(6)Rust的 if 玩法
开发语言·python·rust
Rust研习社17 小时前
Rust 的 move 语义,一次讲透
后端·rust·编程语言
WMYeah21 小时前
【无标题】
前端·rust·抽奖程序·跨平台抽奖程序
楼兰公子1 天前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
Rust研习社2 天前
开源项目里的 deny.toml 是什么?
后端·rust·编程语言
铭毅天下2 天前
当搜索引擎遇上 Rust——深度解读下一代实时搜索引擎 INFINI Pizza
开发语言·后端·搜索引擎·rust
咸甜适中2 天前
rust语言学习笔记Trait之Default(默认值)
笔记·学习·rust
容智信息3 天前
AI Agent(智能体)的输出格式应该从 Markdown 转向 HTML吗?
前端·人工智能·rust·编辑器·html·prompt