• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Rust - 流程控制、函数

武飞扬头像
stark张宇
帮助1

概述

这篇是学习Rust的第二篇博客,在所有的编程语言里都离不开流程控制的模块,流程控制的模块包括条件语句和循环两部分。

if else

Rust的if的布尔条件不用括号括起来。if所有分支返回的类型必须相同。

fn main() {
    let number = 3;
    if number < 5 {
        println!("条件为 true");
    } else {
        println!("条件为 false");
    }
}

loop、while

Rust提供了loop一个关键字来表示无限循环。while是根据条件进行循环。

fn main() {
    let s = ['R', 'U', 'N', 'O', 'O', 'B'];
    let mut i = 0;
    loop {
        let ch = s[i];
        if ch == 'O' {
            break;
        }
        println!("\'{}\'", ch);
        i  = 1;
    }
}

for range

Rust的 for in 语法可以用来遍历一个迭代器,有多种方法可以创建一个迭代器,最简单也是最常见的方式:

  • a…b:这里将创建一个a,但不包含b的,步长为1的迭代器
  • a…=b:这里将创建一个a,且包含b的,步长为1的迭代器
fn main() {
    for i in 0..5 {
        println!("i value is {}",i);
    }
    
    println!("-------------");    

    for i in 0..=5 {
        println!("i value is {}",i);
    }
}

for in 语法第二个重要的使用场景是遍历数组,但这首先将数组转化为一个迭代器,可以通过.iter()或者.iter_mut实现,区别是在于后者是可变的。

fn main() {
    let mut myarray = [1,2,3];
    for i in myarray.iter(){
        println!("i value is {} ",i);
    }

    for  i in myarray.iter_mut() {
        *i *= 2;
    }

    for i in myarray.iter(){
        println!("i value is {} ",i);
    }
}

遍历关联数组:

fn main() {
    let myarray = ["a","b","c"];
    for i in myarray.iter(){
        println!("i value is {} ",i);
    }
}

match / if_let / while_let

在Rust 中 没有 switch 语句,matcher 就是 switch 的一个变形,但比其他语言中的 switch 更强大!

let x = 5;

match x {
    1 => println!("one"),
    2 => println!("two"),
    3 => println!("three"),
    4 => println!("four"),
    5 => println!("five"),
    _ => println!("something else"),
}

函数与方法

函数

函数定义以fn为关键字,它的参数是带类型注释的,就像变量一样,如果函数返回值,则必须在箭头->之后指定返回类型。

fn sum_number(n:u64) -> u64 {
    if n < 2 {
        n
    }else{
        n 1
    }
}

fn main() {
    println!("sumNumber is {}",sum_number(10))
}

函数与闭包

Rust的闭包是一种匿名函数,它可以从它的上下文中捕获变量的值,闭包使用 ||-> 语法定义,闭包可以保存在变量中。

fn main() {
    let time3 = |n:u32| -> u32 { n * 3 };
    println!("time3 is {}",time3(10));
}

move关键字可以从闭包环境中捕获值,它最常用的场景是将主线程中的一个变量传递到了子线程中。

use std::thread;
fn main() {
    let hi = "hi,stark";
    thread::spawn(move || {
        println!("stark value {}",hi);
    }).join();
}

高阶函数 / 发散函数

在数学和计算机科学里,高阶函数至少满足一个条件的函数:

  • 接收一个或多个函数作为输入
  • 输出一个函数

在数学中它们叫做算子或泛函,高阶函数是函数式编程中一个重要概念。

fn action(method:fn(u32,u32)->u32,a: u32,b: u32) -> u32 {
    method(a,b);
}

fn add(a:u32,b:u32) ->  u32 {
    a   b 
}

fn sub(a:u32,b:u32) ->  u32 {
    a - b 
}

fn main() {
  println!("{}",action(add,10,20))
}

发散函数

发散函数指的是永远不会被返回,它们的返回值标记!,这是一个空类型。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkjgfc
系列文章
更多 icon
同类精品
更多 icon
继续加载