You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中new函数参数与结构体成员变量同名是否合法可正常编译?

问题解答

这段代码无法直接通过编译,但调整参数类型声明后,参数与结构体成员同名的写法是完全允许的,且能按预期运行。

1. 原代码的编译错误

原代码中new函数的参数my_data没有声明类型,Rust是强类型语言,要求所有函数参数必须显式标注类型,这是第一个需要修正的点。

2. 修正后的合法代码

添加参数类型后,参数与成员同名的写法完全合法,Rust能明确区分结构体字段和函数参数:

struct MyType {
    my_data: i32,
}

impl MyType {
    pub fn new(my_data: i32) -> Self {
        Self {
            my_data: my_data, // 左边是结构体字段,右边是函数参数,无歧义
        }
    }
}

3. Rust的简化写法

针对字段与参数同名的场景,Rust提供了语法糖,可以直接省略冒号和重复的变量名,写法更简洁:

pub fn new(my_data: i32) -> Self {
    Self { my_data } // 等价于完整写法
}

4. 与C++的对比

和C不同,Rust在结构体初始化的场景下不会出现歧义——冒号左侧固定是结构体的字段名,右侧是当前作用域的变量,不需要类似this->的语法来区分。如果在其他方法中需要区分同名的字段和局部变量,可以通过self.my_data来指代结构体字段(类似C的this->my_data),但Rust的self需要作为方法参数显式声明,而非隐含存在。

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:17:07