Rust-枚举(enumeration)

枚举就是列出有穷序列的型别

透过enum关键字新增了新的Browser型别在范例中列出了一个组项分别为

Firefox,Chrome,IE,Safari内部值分别为0u8,1u8,2u8,3u8表示

通常都是以整数为内部关联值

透过枚举写以下的代码

enum Browser {
    Firefox,
    Chrome,
    Ie,
    Safari,
}

let browser = Browser::Ie;

match browser {
    Browser::Firefox => println!("F"),
    Browser::Chrome => println!("C"),
    Browser::Ie => println!("I"),
    Browser::Safari => println!("S"),
}

不要编写这样的代码

const FIREFOX: u8 = 0;
const CHROME: u8 = 1;
const IE: u8 = 2;
const SAFARI: u8 = 3;

let browser = IE;

if browser == FIREFOX {
    println!("F");
} else if browser == CHROME {
    println!("C");
} else if browser == IE {
    println!("I");
} else if browser == SAFARI {
    println!("S");
}

再怎样也不要写magic number

如何使用枚举

使用Use的方式

// 显式的指定要使用的枚举
use Browser::{Chrome, Firefox, Ie, Safari};

let browser = Ie;

match browser {
    Firefox => println!("F"),
    Chrome => println!("C"),
    Ie => println!("I"),
    Safari => println!("S"),
}

// 自动的使用Browser内部所有的枚举
use Browser::*;

let browser = Ie;

match browser {
    Firefox => println!("F"),
    Chrome => println!("C"),
    Ie => println!("I"),
    Safari => println!("S"),
}

使用带有C风格的用法

enum Browser {
    Firefox,
    Chrome,
    Ie,
    Safari,
}

println!("{}", Browser::Firefox as i32)

枚举不能使用"=="运算子做比较

let browser = Browser::Ie;

if browser == Browser::Ie {
    println!("{}", "hello word")
}

// 编译时会出错
// binary operation `==` cannot be applied to type `Browser`

<<:  Progressive Web App Badging API 入门实做 (8)

>>:  JavaScript Day 12. 每个元素都做运算的 map()

Day-23 CPU Scheduling Algorithm

CPU Scheduling Algorithm tags: IT铁人 作用 因为同时处理很多的pr...

[Day 14] 常用数据显示 Table 表格-2(可调式)

material-UI 有制式的 Table之外 还有像传统 Table一般 用TableConta...

【额外分享】超深度铁人赛後自我审视

本文同步刊於 Medium 目录 前言 铁人赛 系列文提到的项目 比赛结束之後 区块链 近期规划 未...

D27 / 怎麽测试? - Testing Compose

今天大概会聊到的范围 Testing Compose 的 Test 属於 UI Test ,在执行...

Day19:WS 基本 API

API 写法差异 在 client-side & server-side 两端,使用 ws ...