首页 > 其他分享 >[Rust] if let & while let

[Rust] if let & while let

时间:2024-03-04 21:55:05浏览次数:30  
标签:target Some cursor while let optional Rust

https://doc.rust-lang.org/rust-by-example/flow_control/if_let.html
https://doc.rust-lang.org/rust-by-example/flow_control/while_let.html

 

If let:

    #[test]
    fn simple_option() {
        let target = "rustlings";
        let optional_target = Some(target);

        if let Some(word) = optional_target {
            assert_eq!(word, target);
        }
    }

 

while let:

    #[test]
    fn layered_option() {
        let range = 10;
        let mut optional_integers: Vec<Option<i8>> = vec![None];

        for i in 1..(range + 1) {
            optional_integers.push(Some(i));
        }

        let mut cursor = range;

        // TODO: make this a while let statement - remember that vector.pop also
        // adds another layer of Option<T>. You can stack `Option<T>`s into
        // while let and if let.
        while let Some(Some(integer)) = optional_integers.pop() {
            assert_eq!(integer, cursor);
            cursor -= 1;
        }

        assert_eq!(cursor, 0);
    }

 

标签:target,Some,cursor,while,let,optional,Rust
From: https://www.cnblogs.com/Answer1215/p/18052826

相关文章

  • [Rust] Using .map_err instead of wrap which cause panic
    //Usingcatch-allerrortypeslike`Box<dynerror::Error>`isn'trecommended//forlibrarycode,wherecallersmightwanttomakedecisionsbasedonthe//errorcontent,insteadofprintingitoutorpropagatingitfurther.Here,we//defin......
  • [Rust] Using Box<dyn error::Error>> return one of miultiple error types at runti
    usestd::error;usestd::fmt;usestd::num::ParseIntError;fnmain()->Result<(),Box<dynerror::Error>>{letpretend_user_input="42";letx:i64=pretend_user_input.parse()?;println!("output={:?}",Po......
  • TransmittableThreadLocal 如何解决在分布式环境下线程池中使用ThreadLocal的问题
    在分布式环境下,线程池中使用ThreadLocal会出现线程安全问题,因为线程池中的线程是可以被多个请求共享的,当多个请求同时访问同一个ThreadLocal变量时,会出现数据互相干扰的问题。为了解决这个问题,Java提供了TransmittableThreadLocal类。TransmittableThreadLocal是ThreadLocal的一......
  • 动态分配内存new和delete
    #include<iostream>/*动态分配内存用new关键字,语法:new变量类型(初始值)C++11支持{}newint(5)----申请了一个整型内存,并赋初值为5但是由于动态分配的内存没有变量名,需要用一个指针接着它,操作指针来使用。成功会返回一个地址,不成功返回空地址。......
  • CompletableFuture使用说明
    前言创建线程的方式只有两种:继承Thread或者实现Runnable接口。但是这两种方法都存在一个缺陷,没有返回值Java1.5以后,可以通过向线程池提交一个Callable来获取一个包含返回值的Future对象Future接口的局限性当Future的线程进行了一个非常耗时的操作,那我们的主线程也就阻塞了......
  • C++第二课 while循环
    循环while(条件){   循环体}#include<bits/stdc++.h>usingnamespacestd;intmain(){   inti,s;   i=1;   s=0;   while(i<=100)   {      s=s+i;      i=i+1;   }   cout<<s<<endl;   return0;}计算1......
  • bullet3-collision例子
    bullet3的碰撞检测例子在examples/collision,CollisionTutorialBullet2类中,先是plCreateCollisionWorld,然后plCreateSphereShape,创建一些几何shape,然后调plCollide执行两个shape之间的碰撞检测,返回contact点个数及坐标,调plWorldCollide执行world中所有shape的碰撞检测。plXXX(.........
  • C++第七节课 new开辟空间 delete释放空间
    #include<iostream>usingnamespacestd;//C中开辟空间的方式所有的返回值都是void*///int*p=(int*)malloc(sizeof(int))///malloc在堆上开辟空间并没有进行初始化//////int*pa=(int*)calloc(1,sizeof(int));///calloc在堆上开辟空间是有初始化的......
  • AT_abc243_e [ABC243E] Edge Deletion 题解
    首先,我们可以得出一个结论:令点\(i,j\)之间的最短路径边权和\(dis_{i,j}\),若存在一个点\(k\),使得\(k\neqi\)且\(k\neqj\)且\(dis_{i,k}+dis_{k,j}=dis_{i,j}\),则连接\(i,j\)的边可以被删去。该结论的正确性是显然的,因为将连接\(i,j\)的边删去后,\(i,j\)之间的......
  • Go 与 Rust 对比
    在当今构建软件时,开发者在编程语言上有着丰富的选择。两种脱颖而出的语言是Go和Rust,都很强大但却截然不同。将权衡它们在并发、安全性、速度、互操作性等方面的方法。将探讨每种语言的优势-Go适用于云原生开发,而Rust适用于系统编程。它们活跃的开源社区也被评估......