返回 Rust
Rust 2026-05-19

1.struct结构体

1.struct结构体 注意定义时每一组成员(即使是最后一个)都要有一个逗号结尾 可以在struct关键字之后添加mut关键字令该结构体为可变类型,但此时所有成员都是可变的,rust不允许某一部分是可变的!

实例化时对成员的赋值顺序没有要求,因为类似于键值对赋值 可以通过打点访问结构体成员

简单情况下可以使用tuple struct: 相当于利用tuple的特性简化了struct,此时可以利用tuple的特性,比如打点索引访问,模式匹配解构 rust可以有多个impl块 rust可以有 关联函数类似于静态方法

struct示例代码: #[derive(Debug)] struct Rectangle { length:u64, width:u64, } impl Rectangle { fn area(&self)->u64 { self.length*self.width } fn can_hold(&self,other:&Rectangle)->bool { self.length>other.length&&self.width>other.width } } impl Rectangle { fn square(size:u64)->Rectangle { Rectangle { length: size, width: size,} } }

fn main() { let r=Rectangle{length:20,width:30,}; let r1=Rectangle{length:10,width:15,}; let r2=Rectangle{length:30,width:40,}; let s=Rectangle::square(10);

println!("{:#?}",r); println!("the area of r is {}",r.area()); println!("could r hold r1 and r2? {},{}",r.can_hold(&r1),r.can_hold(&r2)); println!("the special rectangle s is:{:#?}",s); }


2.枚举 示例代码: //定义枚举类型 enum IPkind { IPv4, IPv6, } //为枚举实现方法! impl IPkind { fn call(&self) { println!("the enmu of IPkind is called!"); } } //定义附带相关数据的枚举--可以更加详细地描述枚举值 enum IPkindPlus { IPv4(u8,u8,u8,u8), IPv6(String), } fn main() { //创建枚举值 let a=IPkind::IPv4; let b=IPkind::IPv6; b.call();

let c=IPkindPlus::IPv4(127, 0, 0, 1); let d=IPkindPlus::IPv6(String::from("abcd")); }

rust是没有null值的,但是null这种意思还是有意义的,为了在合适的时机能表达出这种意思,rust标准库内置了Option枚举: 代码示例: //Some会自动推导出类型,表示该类型无名的一个值 let x=Some(8); let y=Some("hello"); //None需要显式指名类型,表示该类型的一个空值 let z:Option<i32>=None;

let a=5; let b=Some(8); //错误用法:println!("a plus b ={a+b}");