首页 > 其他分享 >Rust简易入门(九)

Rust简易入门(九)

时间:2024-04-24 16:35:20浏览次数:26  
标签:closure 入门 s1 简易 let Rust func println fn

闭包的基础概念

闭包是一种可以捕获其环境中变量的匿名函数

闭包的语法相对简洁灵活,同时也具有强大的功能。闭包在Rust中被广泛用于函数式编程、并发编程以及简化代码等方面。

定义闭包的语法类似(但更简单)

  • | 内定义参数

  • 可选地指定参数/返回类型

  • {} 内定义闭包体

你可以将闭包分配给一个变量

  • 然后使用该变量,就像它是一个函数名来调用闭包
#[derive(Debug)]
struct User {
    name: String,
    score: u64,
}

// fn sort_score(users: &mut Vec<User>) {
//     users.sort_by_key(sort_helper);
// }

// fn sort_helper(u: &User) -> u64 {
//     u.score
// }

fn sort_score_closure(users: &mut Vec<User>) {
    users.sort_by_key(|u| u.score);
}

fn main() {
    let a = User {
        name: "111".to_string(),
        score: 90,
    };    
    let b = User {
        name: "222".to_string(),
        score: 80,
    };    
    let c = User {
        name: "333".to_string(),
        score: 100,
    };
    
    let mut users = vec![a, b, c];
    sort_score_closure(&mut users);
    
    println!("{:?}", users);
}

闭包获取参数

由Rust编译器决定用那种方式获取外部参数

  1. 不可变引用 Fn

  2. 可变引用 FnMut

  3. 转移所有权(Move) FnOnce

fn main() {
    // fn不可变引用
    let s1 = String::from("111");
    let s2 = String::from("222");
   
    let fn_func = |s| {
        println!("{s1}");
        println!("I am {s}");
        println!("{s1}");
    };
    
    fn_func("moguw".to_owned());
    println!("{s1}, {s2}");
    
    // FnMut可变引用
    let mut s1 = String::from("111");
   
    let mut fn_func = |s| {
        s1.push_str("

标签:closure,入门,s1,简易,let,Rust,func,println,fn
From: https://www.cnblogs.com/moguw/p/18155747/rust-base-9

相关文章

  • Rust简易入门(七)
    迭代与循环循环定义:循环是一种控制流结构,它会反复执行一组语句,直到满足某个条件。控制条件:循环通常包含一个条件表达式,只有在条件为真时,循环体中的语句才会执行。退出条件:循环执行直到条件不再满足,或者通过break语句显式中断循环。使用场景:适用于需要反复执行某个操作直到满......
  • 我为什么学习Rust编程?
    2024-04-24下午,今下午感受到如果要睡觉就应该让音响在自己耳边程序轰炸.翻看gitee,又再次看到这个loop示例,这几天忙于工作,除了偶尔刷下rust视频,rust的电子书,其他的都看得比较少,主要还是感觉工作疲倦之余已经没有精力来继续回顾和延伸.其实后来感觉不是的,就像那会儿接......
  • Python GUI开发- PyQt5 开发小工具环境入门
    前言常见的python开发gui的库有Tkinter,PyQt5,wxPython等。本教程是选择PyQt5开发桌面小工具。环境准备只需pip安装即可快速准备好开发环境pipinstallpyqt5快速开始创建一个空的window窗口Qapplication():每个GUI都必须包含一个Qapplication,argv表示获取命令行参数,如果......
  • 使用SSH从公网服务器简易使用内网任意机器服务,比如从外部下载代码
    如果有一个台外部的机器waibu-host,位于阿里云,腾讯云,亚马逊,azure云等等; 假设你想从这个waibu-host上访问公司任意服务,下载代码,访问http服务,等等,或者你机器上的服务,不需要额外工具,只要ssh反向就可以实现; 借个图,如下: 举个例子,如果你想从公司内部......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本
    1.简介各种自动化框架都会有脚本录制功能,playwright这么牛叉当然也不例外。很早之前的selenium、Jmeter工具,发展到每种浏览器都有对应的录制插件。今天我们就来看下微软自动化框架playwright是如何录制脚本的。很多小伙伴或者童鞋们会觉得奇怪,怎么现在才将录制生成脚本啊,要是早......
  • Python基于opencv实现的人脸识别--入门项目
    先去opencv官网下载人脸识别的训练集https://opencv.org/releases/解压目录要记录主要使用haarcascade_frontalface_default.xml摄像头录入人脸(可选)可以弄一个文件夹,里面放一堆图片importcv2face_name='xxxx'#该人脸的名字#加载OpenCV人脸检测分类器face_cas......
  • Docker从入门到精通:Docker log 命令学习
    前言在使用Docker进行应用程序容器化的过程中,日志管理是一个至关重要的方面。通过有效地管理容器的日志,我们可以快速诊断问题、监视应用程序的运行状况以及确保系统的健康运行。Docker提供了强大的日志管理功能,而dockerlog命令则是我们在日常工作中经常使用的工具之一。本......
  • Rust所有权__Ownership Rules
    First,let’stakealookattheownershiprules.Keeptheserulesinmindaswethroughtheexamplesthatillustratethem:     EachvalueinRusthasanowner.     Therecanonlybeoneowneratatime.     Whentheownergoesoutofsc......
  • 【rust】《Rust深度学习[6]-简单实现逻辑回归(Linfa)》
    什么是LinfaLinfa是一组Rust高级库的集合,提供了常用的数据处理方法和机器学习算法。Linfa对标Python上的 scikit-learn,专注于日常机器学习任务常用的预处理任务和经典机器学习算法,目前Linfa已经实现了scikit-learn中的全部算法。项目结构依赖[package]name="rust-ml-e......
  • .net 连接数据库sql-server 基础入门
    usingSystem.Data;usingSystem.Data.SqlClient;classPranson(){publicstaticvoidMain(){//创建数据库链接对象stringconnString="Server=.;DataBase=CourseManageDB;Uid=sa;Pwd=123456";SqlConnectionconn=newSqlConn......