Rust-模式匹配:简洁、可读,完备

前言

我使用Rust开发将近一年了,每次我读到Rust的核心概念中包含了“模式匹配”时,心里就会不由冷笑,因为我对模式匹配的理解仅限于对枚举值,Result和Option的简单处理,没有觉得它有好高级的地方,最多就是比其它语言中的switch要高级那么一点。但是,最近AI给我提供的一个Rust的例子代码,着实把我惊艳到了。

AI的回答

我的问题:
我需要一个Rust函数,可以从下面的文本中,抓去标签<!--cli:custom-header--><!--/cli-->之间的文本

AI的回答:

fn extract_custom_header(text: &str) -> Option<&str> {
   
    let start_tag = "<!--cli:custom-header-->";
    let end_tag = "<!--/cli-->";
    
    let start_index = text.find(start_tag);
    let end_index = text.find(end_tag);
    
    match (start_index, end_index) {
   
        (Some(start), Some(end)) => {
   
            let content = &text[start + start_tag.len()..end];
            Some(content.trim())
        }
        _ => None
    }
}

fn main() {
   
    let text = r#"
        <html>
            <head>
                <!--cli:custom-header-->
                <title>Custom Header</title>
                <!--/cli-->
            </head>
            <body>
                <h1>Hello, world!</h1>
            </body>
        </html>
    "#;
    
    if let Some(content) = extract_custom_header(text) {
   
        println!("Extracted content: {}", content);
    } else {
   
        println!("Couldn't find custom header");
    }
}

其中,start_index和end_index直接通过模式匹配来取值,这是一个让我觉得值得学习的方面。

    match (start_index, end_index) {
   
        (Some(start), Some(end)) => {
   
            let content = &text[start + start_tag.len()..end];
            Some(content.trim())
        }
        _ => None
    }

我的粗浅理解

个人觉得,这种模式匹配的使用方式之所以值得学习,是因为它能帮助我们在面对多种返回结果时,可以更加简洁和高效的去组织代码逻辑。说它是Rust的核心概念,确实不为过。

这种方式具有以下2个特点:

  • 简洁性和可读性:模式匹配可以将多个条件判断整合到一处,使代码更加简洁和可读。在这段代码中,通过使用模式匹配,可以将多个可能的情况整合到一个match表达式中,使得代码更加清晰明了。

  • 完备性检查:模式匹配可以进行完备性检查,即确保所有可能的情况都被处理到。在这段代码中,通过匹配(Some(start), Some(end)),可以确保只有当start_index和end_index都存在时才执行相应的逻辑;同时,通过"_"这个模式匹配的默认值,显示的给出处理方式,可以确保代码处理了所有可能的情况。

上面的代码来至于我的开源项目:https://gitee.com/hanshu_alan

这篇文章收录我的Rust-实战专栏。请关注我,不要错过更新哟。

相关推荐

  1. Rust-模式匹配简洁完备

    2024-01-17 15:48:03       32 阅读
  2. Rust的if let语法:更简洁模式匹配

    2024-01-17 15:48:03       28 阅读
  3. Rust---模式(Pattern)匹配

    2024-01-17 15:48:03       13 阅读
  4. Rust 模式匹配中的& 和 ref

    2024-01-17 15:48:03       15 阅读
  5. Rust-08-枚举和模式匹配

    2024-01-17 15:48:03       8 阅读
  6. 深入Rust模式匹配与枚举类型

    2024-01-17 15:48:03       35 阅读
  7. Rust】第七节:枚举与模式匹配

    2024-01-17 15:48:03       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-17 15:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-17 15:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-17 15:48:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-17 15:48:03       20 阅读

热门阅读

  1. 括号匹配C++

    2024-01-17 15:48:03       30 阅读
  2. Linux常用命令总结

    2024-01-17 15:48:03       38 阅读
  3. 二阶三阶魔方还原公式

    2024-01-17 15:48:03       32 阅读
  4. Spring 启动过程

    2024-01-17 15:48:03       27 阅读
  5. HTTP API 认证技术详解(三):JWT Authentication

    2024-01-17 15:48:03       28 阅读
  6. 通信行业无线基本概念

    2024-01-17 15:48:03       35 阅读
  7. SQL笔记 -- 查询优化

    2024-01-17 15:48:03       31 阅读
  8. duilib 窗口绘制过程

    2024-01-17 15:48:03       20 阅读
  9. 【Spring Boot 3】【数据源】自定义多数据源

    2024-01-17 15:48:03       33 阅读