如何为Rust元组结构体成员自动分配默认值?
Rust元组结构体初始化与默认值实现方案
直接初始化元组结构体
Rust要求所有变量在使用前必须完成初始化,元组结构体无法先声明再单独给成员赋值(因为变量本身还未被实例化)。你可以直接在声明时创建带默认值的实例:
struct A(f64, i32); fn main() { // 直接初始化默认值 let mut a = A(0.0, 0); println!("{}, {}", a.0, a.1); // 输出 0.0, 0 // 初始化后可以修改成员 a.0 = 1.2; a.1 = 3; println!("{}, {}", a.0, a.1); // 输出 1.2, 3 }
实现Default trait自动生成默认值
如果需要频繁创建带默认值的A实例,可以为结构体实现Default trait,这样就能用A::default()快速获取默认实例:
struct A(f64, i32); impl Default for A { fn default() -> Self { A(0.0, 0) // 自定义默认值 } } fn main() { let mut a = A::default(); println!("{}, {}", a.0, a.1); // 输出 0.0, 0 // 按需修改成员 a.0 = 1.2; a.1 = 3; println!("{}, {}", a.0, a.1); // 输出 1.2, 3 }
Rust 1.63及以上版本中,还可以用#[derive(Default)]宏自动实现(前提是结构体所有成员类型都已实现Default,f64和i32都满足这个条件):
#[derive(Default)] struct A(f64, i32); fn main() { let mut a = A::default(); println!("{}, {}", a.0, a.1); // 输出 0.0, 0 }
为什么直接赋值成员会失败?
你注释掉的a.0 = 1.2;代码无法编译,核心原因是let mut a: A;仅声明了变量类型,没有分配内存或创建A的实例。Rust的变量必须先完成实例化(即创建A对象),才能访问和修改它的成员。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

