关于rust:Rust教程四

枚举

能够给成员增加元组属性,属性类型能够雷同,也能够不同。

enum FRUIT {
    APPLE = 0, 
    BANANA = 1, 
    ORANGE = 2, 
    GRAPE =3,
}

#[derive(Debug)]
enum IPADDR {
    V4(u8,u8,u8,u8),
    V6(String),
}

let myFavorite = FRUIT::APPLE;

println!("My favorite fruit is {:?}",myFavorite);
println!("{:?} value is {:?}", FRUIT::APPLE, FRUIT::APPLE as i32);

let myIP = IPADDR::V4(192,168,21,1);

println!("My ip addr:{:?}", myIP);

通过match能够对enum中的值做相应解决,match不仅对enum也能够对根底类型进行对应解决。match能够看作是C/C++的switch(不须要break,每次匹配到对应的值解决完后主动break)

match myFavorite {
    FRUIT::APPLE => {
        println!("Red");
    },
    FRUIT::BANANA => {
        println!("Yellow");
    },
    FRUIT::ORANGE => {
        println!("Orange");
    },
    FRUIT::GRAPE => {
        println!("Purple");
    },
}

match的default的选项解决应用”_”,示意除去下面列出的选项外所有值。

    let num = 25;

    match num {
        0..=9 => {
            println!("Num in [0..9]");
        },

        10..=50 => {
            println!("Num in [10..50]");
        },

        51..=100 => {
            println!("Num in [51..100]");
        },
        _ => {
            println!("Num out of valid range [0..100]");
        }
    }

因为rust为了平安勾销了null,然而在默写非凡状况下null依然非常不便。rust引入了None,None同样是一个确认值。例如一个函数,依据计算结果返回值,但如果出现异常或者参数谬误,则返回有效None

enum ReturnOption{
    Some(u32),
    None,
}

fn retValue(num:u32) -> ReturnOption {
    match num {
        0..=9 => {
            println!("Num in [0..9]");
            return ReturnOption::Some(0);
        },

        10..=50 => {
            println!("Num in [10..50]");
            return ReturnOption::Some(1);
        },

        51..=100 => {
            println!("Num in [51..100]");
            return ReturnOption::Some(2);
        },
        _ => {
            println!("Num out of valid range [0..100]");
            return ReturnOption::None;
        }
    }
}

应用unwrap办法能够将Some()中的数值取出

    let x = Some(33);

    println!("{}",x.unwrap())

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理