[Day10] 列举体与错误处理

终於到第十天拉,距离结束基础语法只剩几天了,有没有感到不舍阿
目前计画跟原本预先想的差不多,但是我在想要不要先介绍几个常用的套件@@
让我再想个几天吧。


今天要介绍的是 enum 列举体
那这个东西让 Rust 的简洁度更高,也有了更多的表现力
这次我也会联合错误处理也就是 Result<T, E> 跟 Option 下去说明。
因为这些错误处理就是依靠 enum 构成的。
首先看个简单的例子

pub enum Option<T> {
    None,
    Some(T),
}

那上面就是 Option 的架构,可以发现其实上面也利用了之前所讲的泛型
和结构体不同的是 列举体 里面存的是值 而不是类型。也就是说利用 enum 可以在 Rust 中实现 多型。

enum Sizes {
    Big,
    Medium,
    Small,
}

上面就是个以大小区分的 列举体。
那可以这样使用

let owo = Sizes::Big;
match owo {
    Big => {println!("Ur Big")},
    Medium => {println!("U Good")},
    Small => {println!("eat more")},
}

那以上是最基础的使用方式,但是绝对不只於此
因为他是可以带资料的。

enum Event {
    KeyPress(char),
    Click { x: i64, y: i64 },
}

fn input(event: Event) {
    match event {
        Event::KeyPress(c) => {println!("{}", c)}
        Event::Click{x, y} => {
            println!("{} {}", x, y);
        }
    }
}

就像这样使用

以上是枚举的基础利用

那我刚刚讲到 Result 跟 Option 是为了错误处理而出现地。
而 Result 跟 Option 差别在哪我下面会提到


Result 是拿来干嘛的?

Result 是使用列举体去构成的 原码如下:

enum Result<T, E> {
    Ok(T),
    Err(E),
}

你可以发现 有个 Ok 跟 Err 废话
Ok 表示的是这个能够成功使用
Err 则反
有点类似 try...catch
那麽如果说只想拿 Ok 的情况略过撰写 match 的话可以使用 unwrap 或是加个问号
还有一个 expect 但是 expect 是当 err 出现时会跑到但是不取值
也就是说可以直接拿来看是否是因为这个部分而导致程序错误喔。
那其实 Result 跟 Option 的差别并不大差别只在於
一个是抓错误进行处理,一个是当没有回传时进行处理。


今天大概这样 晚安各位
有问题请提问


<<:  新新新手阅读 Angular 文件 - Interpolation(2) - Day14

>>:  [Day12] 学 Reactstrap 就离 React 更近了 ~ Component 的引入&使用

Day7 CSV档处理

在经历上一部函数与类别的摧残後,这两天就来教一些比较温和的程序吧~ 今天的影片内容为介绍常见的档案格...

【修正模型】4-3 事件循环(Event Loop)与任务队列(Job Queue)

同步(Synchronous)与非同步(Asynchronous) 在理解执行上下文与呼叫堆叠之後,...

什麽是痛点?

痛点用在很多应用场景,在叙述使用者经验时,就是在替代用户在使用上不满,或是离开产品服务的关键要点。现...

Kubernetes 和云原生教程

Kubernetes 开源有 6 年时间了,为什么还要写一篇 Kubernetes 入门的文章?”...

拿 ml5 来练习 Teachable Machine (三)

介绍 首先介绍什麽是 Teachable Machine, Teachable Machine 是一...