1 定义结构体```rust
struct Rectangle { length: u32, width: u32, }
<a name="pO48d"></a>
# 2 结构体字面量```rust
let length1 = 50;
let width1 = 30;
let rect = Rectangle{
length:length1,
width:width1,
};
3 输出结构体
- println!(“{}”)要求类型实现std::fmt::Display特性
- println!(“{:?}”) 以调试格式输出类型,要求类型实现 std::fmt::Debug 特性
可通过 #[derive(Debug)] 注解来让结构体实现 std::fmt::Debug 特性```rust
[derive(Debug)]
struct Rectangle { length: u32, width: u32, } ```
为结构体定义方法和关联函数```rust impl Rectangle{ // 结构体方法定义中也需要注意,必要时候使用引用 fn area(&self)-> u32{
let x = self.length * self.width;
return x;
}
// 关联函数: 不是成员函数,但是与类型相关 fn square(size: u32) -> Rectangle {
return Rectangle { length: size, width: size };
} } ```
4 源代码```rust
fn main() { let length1 = 50; let width1 = 30; let rect = Rectangle{ length:length1, width:width1, };
println!("Area1: {}",area1(length1, width1));
println!("Area2: {}",area2((length1,width1)));
println!("Area3: rect={:?} area={}",rect,area3(&rect));
println!("Area4: area={}",rect.area());
let s = Rectangle::square(100);
println!("rect={:#?}",s);
}
fn area1(length: u32, width: u32) -> u32 { length * width }
fn area2(dimens: (u32,u32)) -> u32 { return dimens.0 * dimens.1; }
// 通过注解继承特性
[derive(Debug)]
struct Rectangle { length: u32, width: u32, }
// 对于仅含简单标量的结构体,也需要注意所有权的问题,必要时候使用引用 fn area3(rect: &Rectangle)->u32{ return rect.length * rect.width; }
impl Rectangle{ // 结构体方法定义中也需要注意,必要时候使用引用 fn area(&self)-> u32{ let x = self.length * self.width; return x; }
// 关联函数: 不是成员函数,但是与类型相关
fn square(size: u32) -> Rectangle {
return Rectangle { length: size, width: size };
}
} ```