【无标题】

#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));
}
相关推荐
大卫小东(Sheldon)21 小时前
Rust 推荐使用宏而非普通函数的场景
rust
doiito21 小时前
【Agent Harness】为什么我把 JSON‑LD “编译成 DAG” 后,整个 Agent 平台立刻聪明了
ai·rust·架构设计·系统设计·ai agent
jump_jump1 天前
为了重玩金庸群侠传,我研究了一下 Ruffle 怎么复活 Flash
游戏·rust·github
LinXunFeng1 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
星栈2 天前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架
Rust研习社4 天前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
红尘散仙5 天前
想写一个像样的终端 App?试试把 React 的开发体验搬进 Rust TUI
前端·rust
vivo互联网技术5 天前
从 Web 到桌面:基于 Tauri 2.0 + Vue 3 打造 vivo 线下门店「大头贴」拍照体验系统
前端·rust
Rust研习社5 天前
这 8 个 Rust 学习资源值得每个新手收藏起来
后端·rust·编程语言
通信小呆呆6 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人