1 定义结构体```rust

struct Rectangle { length: u32, width: u32, }

  1. <a name="pO48d"></a>
  2. # 2 结构体字面量```rust
  3. let length1 = 50;
  4. let width1 = 30;
  5. let rect = Rectangle{
  6. length:length1,
  7. width:width1,
  8. };

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{

    1. let x = self.length * self.width;
    2. return x;

    }

    // 关联函数: 不是成员函数,但是与类型相关 fn square(size: u32) -> Rectangle {

    1. return Rectangle { length: size, width: size };

    } } ```

4 源代码```rust

fn main() { let length1 = 50; let width1 = 30; let rect = Rectangle{ length:length1, width:width1, };

  1. println!("Area1: {}",area1(length1, width1));
  2. println!("Area2: {}",area2((length1,width1)));
  3. println!("Area3: rect={:?} area={}",rect,area3(&rect));
  4. println!("Area4: area={}",rect.area());
  5. let s = Rectangle::square(100);
  6. 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; }

  1. // 关联函数: 不是成员函数,但是与类型相关
  2. fn square(size: u32) -> Rectangle {
  3. return Rectangle { length: size, width: size };
  4. }

} ```