【无标题】

#[derive(Debug)] 做了什么

  • 加上#[derive(Debug)]属性时,编译器 会自动为这个类型生成 Debug特征的实现代码
    • 就可以使用 println!("{:?}", your_variable) 或者 dbg!(your_variable) 这样的语句来打印出该变量的详细信息了。
rust 复制代码
#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let p = Point { x: 10, y: 20 };
    println!("{:?}", p);
}



rust 复制代码
#[derive(Debug)]
struct Rectangle {
    width: u32,
    length: u32,
}
// 结构体 实现方法
impl Rectangle {
    // 传入引用的 结构体
    fn area(&self) -> u32 {
        self.width * self.length
    }

    fn can_hold(&self, other: &Rectangle) -> bool {
        self.width >= other.width && self.length >= other.length
    }
}
fn main() {
    let rect1: Rectangle = Rectangle {
        width: 30,
        length: 50,
    };
    let rect2: Rectangle = Rectangle {
        width: 10,
        length: 50,
    };
    let rect3: Rectangle = Rectangle {
        width: 40,
        length: 50,
    };

    println!("{}", rect1.can_hold(&rect2));
    println!("{}", rect1.can_hold(&rect3));
    println!("{}", rect1.area());
    println!("{:#?}", rect1);
}
rust 复制代码
#[derive(Debug)]
struct Rectangle {
    width: u32,
    length: u32,
}
// 结构体 实现方法
impl Rectangle {
    // 传入引用的 结构体
    fn area(&self) -> u32 {
        self.width * self.length
    }

    fn can_hold(&self, other: &Rectangle) -> bool {
        self.width >= other.width && self.length >= other.length
    }

    // 关联函数
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            length: size,
        }
    }
}
fn main() {
    let rect1: Rectangle = Rectangle {
        width: 30,
        length: 50,
    };
    let rect2: Rectangle = Rectangle {
        width: 10,
        length: 50,
    };
    let rect3: Rectangle = Rectangle {
        width: 40,
        length: 50,
    };
    // 调用关联方法
    let s1: Rectangle = Rectangle::square(32);

    println!("{}", rect1.can_hold(&rect2));
    println!("{}", rect1.can_hold(&rect3));
    println!("{}", rect1.area());
    println!("{:#?}", rect1);
    println!("{:#?}", s1);
}

println!("{:#?}", s1);

这个看里面几个特殊字符有什么意义

  • {}这是格式化输出的占位符
  • #当与格式化输出的 {} 结合使用{:#?} 这种形式相比于 {:?} 会让输出的格式更 "美观" 、易读,呈现出更有层次结构的缩进格式,便于查看复杂数据结构内部详细的成员信息等
  • ? 在格式化输出的上下文中,与 {} 配合使用时用于告诉 Rust 编译器按照实现的 Debug 特性的要求来格式化输出对应的值。
rust 复制代码
enum IpAddrKind {
    v4(u8, u8, u8, u8),
    v6(String),
}

fn main() {
    let home = IpAddrKind::v4(127, 0, 0, 1);
    let loopback = IpAddrKind::v6(String::from("::1"));
}


rust 复制代码
#[derive(Debug)]
enum IpAddrKind {
    v4(u8, u8, u8, u8),
    v6(String),
}
impl IpAddrKind {
    fn ping(&self) {
        println!("{:?}", self)
    }
}
fn main() {
    let home = IpAddrKind::v4(127, 0, 0, 1);
    let loopback = IpAddrKind::v6(String::from("::1"));
    home.ping();
}



rust 复制代码
fn main() {
    let some_number = Some(5);
    let some_string = Some("slice str");

    let absent_number: Option<i32> = None;
}




rust 复制代码
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

fn main() {
    value_in_cents(Coin::Dime);
}
rust 复制代码
#[derive(Debug)]
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => {
            println!("{:#?}", coin);
            1
        }
        Coin::Quarter => 25,
    }
}

fn main() {
    value_in_cents(Coin::Dime);
}
rust 复制代码
#[derive(Debug)]
enum UsState {
    Alabama,
    Alaska,
    Arizona,
    Arkansas,
    California,
    Colorado,
    Connecticut,
    Delaware,
    Florida,
    Georgia,
    Hawaii,
    Idaho,
    Illinois,
    Indiana,
    Iowa,
    Kansas,
    Kentucky,
    Louisiana,
    Maine,
    Maryland,
    Massachusetts,
    Michigan,
    Minnesota,
    Mississippi,
    Missouri,
    Montana,
    Nebraska,
    Nevada,
    NewHampshire,
    NewJersey,
    NewMexico,
    NewYork,
    NorthCarolina,
    NorthDakota,
    Ohio,
    Oklahoma,
    Oregon,
    Pennsylvania,
    RhodeIsland,
    SouthCarolina,
    SouthDakota,
    Tennessee,
    Texas,
    Utah,
    Vermont,
    Virginia,
    Washington,
    WestVirginia,
    Wisconsin,
    Wyoming,
}

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Dime => 1,
        Coin::Nickel => 5,
        Coin::Penny => 10,
        Coin::Quarter(state) => {
            println!("{:#?}", state);
            25
        }
    }
}

fn main() {
    value_in_cents(Coin::Quarter(UsState::Alabama));
}
相关推荐
使一颗心免于哀伤14 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
该用户已不存在2 天前
Mojo vs Python vs Rust: 2025年搞AI,该学哪个?
后端·python·rust
大卫小东(Sheldon)2 天前
写了一个BBP算法的实现库,欢迎讨论
数学·rust
_落纸3 天前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
echoarts3 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Alice-YUE3 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha3 天前
SpringBoot
笔记·学习
萘柰奈3 天前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽3 天前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫3 天前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习