• 【rust简单工具理解】


    1.map方法

    map这个闭包的本质就是映射

    let numbers = vec![1, 2, 3, 4, 5];
    let numbers_f64: Vec<f64> = numbers.into_iter().map(|&x| x as f64).collect();
    println!("{:?}", numbers_f64); // 输出: [1.0, 2.0, 3.0, 4.0, 5.0]
    
    • 1
    • 2
    • 3

    2.and_then

    and_then 是 Rust 中 Option 和 Result 类型的一个方法,它用于链式处理可能的错误或 None 值。当你有一个 Option 或 Result 类型的值,并且想要根据它的值执行某些操作时,这个方法非常有用。

    对于 Option 类型,and_then 方法接受一个闭包,这个闭包接受 Option 中的值,并返回另一个 Option。如果原始的 Option 是 None,and_then 会立即返回 None,而不会执行闭包。如果原始的 Option 是 Some(value),and_then 会将 value 传递给闭包,闭包返回的 Option 将作为 and_then 的最终结果。

    对于Result类型,and_then 的行为类似,但它用于处理可能的错误。如果原始的 Result 是 Ok(value),and_then 会将 value 传递给闭包,闭包返回的 Result 将作为 and_then 的最终结果。如果原始的 Result 是 Err(_),and_then 会立即返回这个错误。

    3.parse()

    在 Rust 中,parse 方法用于将字符串解析为特定的数据类型。这个方法通常是通过为类型实现 std::str::FromStr trait 来提供的。当字符串的格式符合预期的数据类型时,parse 方法能够安全地转换字符串为该类型。如果字符串不符合格式要求,parse 方法会返回一个 Result 类型,其中包含一个错误信息(Err),或者转换成功的值(Ok)。

    fn main() {
        let num_str = "123";
        match num_str.parse::<i32>() {
            Ok(num) => println!("Parsed number is: {}", num),
            Err(e) => println!("Error parsing string: {}", e),
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    fn main() {
        let float_str = "3.14";
        match float_str.parse::<f64>() {
            Ok(num) => println!("Parsed float is: {}", num),
            Err(e) => println!("Error parsing string: {}", e),
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    高级用法

    use std::num::ParseIntError;
    
    #[derive(Debug, PartialEq)]
    struct MyNumber {
        value: i32,
    }
    
    impl std::str::FromStr for MyNumber {
        type Err = ParseIntError;
    
        fn from_str(s: &str) -> Result<Self, Self::Err> {
            let num: i32 = s.parse()?;
            Ok(MyNumber { value: num })
        }
    }
    
    fn main() {
        let my_num_str = "42";
        match my_num_str.parse::<MyNumber>() {
            Ok(my_num) => println!("Parsed MyNumber is: {:?}", my_num),
            Err(e) => println!("Error parsing string: {}", e),
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4.unwrap()

    在实际编程中,应该尽量避免使用 unwrap(),特别是在生产代码中,因为它会导致程序在遇到错误时崩溃。相反,应该使用 match、if let、expect 或其他方法来优雅地处理错误或 None 值。这样可以提高程序的健壮性和可维护性

    5.as_array()

    在 Rust 中,并没有一个全局的 as_array() 方法。然而,as_array() 方法可能出现在使用 serde_json crate 处理 JSON 数据时。serde_json 是一个流行的 Rust 库,用于序列化和反序列化 JSON 数据。

    当你从 JSON 数据中反序列化一个值到 serde_json::Value 类型时,你可能需要检查这个值是否是一个数组,并从中提取数据。serde_json::Value 类型提供了 as_array() 方法,但它实际上返回一个选项类型 Option<&[Value]>,其中包含对数组中所有 Value 实例的引用的切片。

    6.filter_map

    这个等于是map的加强版闭包

    fn main() {
        let nums = vec![1, 2, 3, 4, 5];
        
        // 过滤出偶数,并将其转换为字符串
        let evens_as_strings: Vec<String> = nums.into_iter()
            .filter_map(|x| if x % 2 == 0 { Some(x.to_string()) } else { None })
            .collect();
        
        println!("{:?}", evens_as_strings); // 输出: ["2", "4"]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    ios 三方库的使用之 MJExtension
    如何监听电脑屏幕是否发生切换
    myj的尘歌壶
    弹指间计算机协会 2021“千里码”程序设计竞赛 题面
    Es中索引的删除操作
    VisualC++游戏制作MFC版本
    【Spring】SpringBoot配置文件
    C. Orac and LCM(gcd与lcm的性质)
    5步绘制软件开发流程图
    C++入门学习2-指针与整型数组(Clion)
  • 原文地址:https://blog.csdn.net/qq_54384621/article/details/137866368