通过例子学 rust 个人精简版 3-2

3-2

枚举
enum WebEvent {
    PageLoad,
    PageUnload,
    KeyPress(char),
    Paste(String),
    Click { x: i64, y: i64 }
}
fn inspect(event: WebEvent) {
    match event {
        WebEvent::PageLoad => println!("page loaded"),
        WebEvent::PageUnload => println!("page unloaded"),
        WebEvent::KeyPress(c) => println!("pressed '{}'.", c),
        WebEvent::Paste(s) => println!("pasted \"{}\".", s),
        WebEvent::Click { x, y } => {
            println!("clicked at x={}, y={}.", x, y);
        },
    }
}

enum VeryVerboseEnumOfThingsToDoWithNumbers {
    Add,
    Subtract,
}
type Operations = VeryVerboseEnumOfThingsToDoWithNumbers;
fn main() {
    let x = Operations::Add;
}
要点1 : 枚举里面 只有 这三种 结构体 单元结构体 元组结构体 普通结构体
要点2 : match 里解构 变量 
要点3 : type 类型别名
enum VeryVerboseEnumOfThingsToDoWithNumbers {
    Add,
    Subtract,
}

impl VeryVerboseEnumOfThingsToDoWithNumbers {
    fn run(&self, x: i32, y: i32) -> i32 {
        match self {
            Self::Add => x + y,
            Self::Subtract => x - y,
        }
    }
}
fn main() {
    let op1 = VeryVerboseEnumOfThingsToDoWithNumbers::Add;
    let op2 = VeryVerboseEnumOfThingsToDoWithNumbers::Subtract;

    println!("Add: {}", op1.run(10, 5));      // 输出: 15
    println!("Subtract: {}", op2.run(10, 5)); // 输出: 5
}
要点1 :impl -> implement 
要点2 :impl 里的 self 指向调用者 
enum Status {
    Rich,
    Poor,
}
enum Work {
    Civilian,
    Soldier,
}
fn main() {
    use Status::{Poor, Rich};
    use Work::*;

    let status = Poor;
    let work = Civilian;

    match status {
        Rich => println!("The rich have lots of money!"),
        Poor => println!("The poor have no money..."),
    }
    match work {
        Civilian => println!("Civilians work!"),
        Soldier  => println!("Soldiers fight!"),
    }
}
要点1 : use 引入  括号 和 星  
要点2 : 引入后可以跟结构体一样使用
补充: 可以 在括号里self
// 拥有隐式辨别值(implicit discriminator,从 0 开始)的 enum
enum Number {
    Zero,
    One,
    Two,
}
// 拥有显式辨别值(explicit discriminator)的 enum
enum Color {
    Red = 0xff0000,
    Green = 0x00ff00,
    Blue = 0x0000ff,
}
fn main() {
    // `enum` 可以转成整型。
    println!("zero is {}", Number::Zero as i32);
    println!("one is {}", Number::One as i32);

    println!("roses are #{:06x}", Color::Red as i32);
    println!("violets are #{:06x}", Color::Blue as i32);
}
要点1 : 辨别值 为 enum 单元变体 独有
要点2 : 第一种为c风格的枚举
要点3 : 辨别值 只有在转 数字类型才能使用
static LANGUAGE: &'static str = "Rust";
const  THRESHOLD: i32 = 10;

fn is_big(n: i32) -> bool {
    n > THRESHOLD
}
要点1 :const 不可变 命名规范为全大写
要点2 :不在任何作用域的 变量 为全局变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值