RUST学习过程

一、基础知识:

  1. todo!:这个宏用来标记未实现功能。

  2. 可以不写retuen的写法(if/else不能写分号,break带分号,loop写不写看情况):

    fn fib(n: u32) -> u32 {
    if n <= 2 {
    // The base case.
    1
    } else {
    // The recursive case.
    fib(n-2) + fib(n-1)
    }
    }
    let size = if x < 20 { "small" } else { "large" };

  3. loop简单理解为没有while条件的do循环

  4. 常用宏:
    println!(format, ...) prints a line to standard output, applying formatting described in std::fmt.
    format!(format, ...) 的用法与 println! 类似,但它以字符串形式返回结果。
    dbg!(expression) 会记录表达式的值并返回该值。
    todo!() 用于标记尚未实现的代码段。如果执行该代码段,则会触发 panic。
    unreachable!() 用于标记无法访问的代码段。如果执行该代码段,则会触发 panic

  5. 数组声明方式:let mut a: i8; 10 = 42; 10;

  6. 模式匹配match示例类似于switch(增强版)

fn 复制代码
    let input = 'x';
    match input {
        'q'                       => println!("Quitting"),
        'a' | 's' | 'w' | 'd'     => println!("Moving around"),
        '0'..='9'                 => println!("Number input"),
        key if key.is_lowercase() => println!("Lowercase: {key}"),
        _                         => println!("Something else"),
    }
}
  1. 独占引用与共享引用:理解为写锁与读锁

  2. if let:单条的模式匹配

  3. 在rust中语句的值是类型可以兼容一切类型

  4. Debug、Clone、Default默认trait使用

    #[derive(Debug, Clone, Default)]
    struct Player {
    name: String,
    strength: u8,
    hit_points: u8,
    }

    fn main() {
    let p1 = Player::default(); // Default trait adds default constructor.
    let mut p2 = p1.clone(); // Clone trait adds clone method.
    p2.name = String::from("EldurScrollz");
    // Debug trait adds support for printing with {:?}.
    println!("{:?} vs. {:?}", p1, p2);
    }

  5. drop是固定的析构函数,Box是智能指针

  6. collect返回任意集合类型,不只是vector,要么在collect处设置类型,要么在接收collect返回的地方指定类型(模板),必须搭配迭代器使用:

    fn main() {
    let primes = vec![2, 3, 5, 7];
    let prime_squares = primes.into_iter().map(|p| p * p).collect::<Vec<_>>();
    println!("prime_squares: {prime_squares:?}");
    }

  7. 养成单元测试的习惯

相关推荐
拾光向日葵几秒前
江西物理类本科线上30—50分,能报南昌科技职业大学本科专业吗?
学习·其他
AI_零食4 分钟前
健身室器材管理系统鸿蒙PC Electron框架编写深度解析
前端·javascript·学习·华为·electron·前端框架·鸿蒙
Pocker_Spades_A10 分钟前
[鸿蒙PC命令行移植适配]移植rust三方库ox到鸿蒙PC的完整实践
华为·rust·harmonyos
EterNity_TiMe_21 分钟前
[鸿蒙PC命令行移植适配]移植rust三方库choose到鸿蒙PC的完整实践
华为·rust·harmonyos
Pocker_Spades_A24 分钟前
[鸿蒙PC命令行移植适配]移植rust三方库tojson到鸿蒙PC的完整实践
华为·rust·harmonyos
Pocker_Spades_A25 分钟前
[鸿蒙PC命令行移植适配]移植rust三方库hexyl到鸿蒙PC的完整实践
华为·rust·harmonyos
ZC跨境爬虫27 分钟前
跟着 MDN 学 JavaScript day_2:JavaScript 初体验
开发语言·前端·javascript·学习·ecmascript
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第五篇:性能优化与上线运维:保障高并发场景下的工具稳定运行
运维·学习·性能优化·sap·abap·erp·经验交流
Jun6261 小时前
QT(3)-线程中使用控件
开发语言·qt
nashane1 小时前
HarmonyOS 6学习:NFC服务中IsoDep连接失败的排查与解决——从参数匹配到多SDK协同的完整指南
学习·华为·harmonyos