rust 各种骚操作

前言

rust 代码确实简介,但是各种操作做层出不穷,这里记录一下一些难以理解的晦涩语法。

正文

奇怪的省略值。
fn main() {let numbers = (2, 4, 8, 16, 32);match numbers {(first, .., last) => {println!("Some numbers: {}, {}", first, last);},}
}

…可以省略元组或者接头体的一些无关参数,子啊这个元组中,4.8.16 是我们不关注的,所以可以省略匹配,只匹配第一个和最后一个,所以就拿到了2和16.

多层嵌套的match语法
?号的嵌套操作

?其实更像是一个宏,可以替换成

let f = funx()?
//等价于
let f = match funx() {Ok(data)=> data,Err(e) => return Err(e),

但是嵌套到循环中就比较让人疑惑的

fn divide(a: i32, b: i32) -> Result<Option<i32>, String> {if b == 0 {return Err("Division by zero".to_string());}Ok(Some(2))
}fn calculate(a: i32, b: i32) -> Result<i32, String> {let mut tmp = 2;while let Some(i) = divide(a, tmp)?{println!("=====: {:?}", i);tmp = tmp -1}Ok(3)

其实这里类似于一个loop循环,只是加入了err强制返回操作

iter的神奇操作
//frame_data 类型是BTreeMap
let frame_data = BTreeMap::new()frame_data.iter().skip_while(|(&output_frameno, _)| {output_frameno < self.output_frameno}).find(|(_, data)| data.is_some()).map(|(&output_frameno, _)| output_frameno).ok_or(EncoderStatus::NeedMoreData)?; // TODO: doesn't play well with the below check?

因为BTreeMap类型是k-v数据map。所以iter后,会变成一种rust的元组类型,无论在后面的各种操作,都可以通过闭包来处理,map是把k-v元组转换成k。

令人迷惑的into()

rust 是类型推断的,并且类的函数可以在各种地方添加,甚至可以让一个类无缘无故的拥有一些特性,而into则是鲜明的例子。into代码如下:

// From implies Into
#[stable(feature = "rust1", since = "1.0.0")]
impl<T, U> Into<U> for T
whereU: From<T>,
{/// Calls `U::from(self)`.////// That is, this conversion is whatever the implementation of/// <code>[From]&lt;T&gt; for U</code> chooses to do.#[inline]fn into(self) -> U {U::from(self)}
}// From (and thus Into) is reflexive
#[stable(feature = "rust1", since = "1.0.0")]
impl<T> From<T> for T {/// Returns the argument unchanged.#[inline(always)]fn from(t: T) -> T {t}
}

这段代码是任何的T(任何一个struct,都可以调用)都拥有了Into这个trait(内部有Into方法)。只是这个方法的返回值必须实现From这个trait。通俗的说,我想让结构体A。变成B,我只用把B实现From这个trait。就可以直接调用A的into函数。
这种思考方式非常符合人类的思维模式,但是却很不面向对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零日漏洞:威胁与应对

一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;零日漏洞已成为当今网络安全领域最受关注的问题之一。本文将深入探讨零日漏洞的威胁、产生原因以及应对策略&#xff0c;以期提高人们对这一问题的认识和防范意识。 二、零日漏洞的威胁 …

892. 台阶-Nim游戏

#include<bits/stdc.h>using namespace std;int main() {int n;cin>>n;int res0;for(int i1;i<n;i){int x;cin>>x;if(i%2){res^x;}}if(res) puts("Yes");else puts("No");return 0; }最优游戏策略是&#xff1a;如果另一个人操作的…

PostgreSQL 的对象层次

所有的数据库离开数据量来谈性能都是耍流氓。 就你那几万条的数据库&#xff0c;用啥都行&#xff0c;典型的就是怎么方便怎么来。 不过 PostgreSQL 上手确实比 MySQL 概念更多。 PostgreSQL 比 MySQL 多了一层。 PostgreSQL 是从PostgreSQL 是从 Database&#xff0c;到 S…

C++---string类

一.string类&#x1f357; C支持C风格的字符串&#xff0c;另外还提供了一种 字符串数据类型&#xff1a; string是定义在头文件string中的类&#xff0c;使用前需要包含头文件string。 #include<string> C语言中的字符串需要引用头文件#include<string.h> #includ…

RabbitMQ-业务的幂等性

一、幂等性处理方式 1、使用唯一id 生产者和消费者都需要添加配置类&#xff1a; Beanpublic MessageConverter jsonMessageConverter() {Jackson2JsonMessageConverter jackson2JsonMessageConverter new Jackson2JsonMessageConverter();jackson2JsonMessageConverter.set…

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model&#xff08;数据默认是存放在Request域中&#xff09; 与第一种方式其实是一致的 第三种 使用Map集合&#xff08;数据默认是存放在Request域中&#xff09;

20234.1.20 使用idea进行Java的helloworld程序开发

20234.1.20 使用idea进行Java的helloworld程序开发 idea毕竟是jtbrain的产品&#xff0c;整体和pycharm相同&#xff0c;初步使用感受比eclipse更亲切 一、程序结构 project&#xff08;项目&#xff0c;工程&#xff09; module&#xff08;模块&#xff09; package&…

回调地狱与解决方案

什么是回调地狱&#xff1f; 简单理解就是回调函数嵌套回调 示例&#xff1a; setTimeout(() > {console.log(1);setTimeout(() > {console.log(2);setTimeout(() > {console.log(3);}, 1000);}, 2000)}, 3000)如上代码所示&#xff0c;回调函数嵌套回调&#xff0c;就…

Django从入门到精通(一)

目录 一、Django环境搭建与命令 1.1、安装 1.2、命令行 创建项目 编写代码 运行 app概念 1.3、Pycharm创建项目 1.4、虚拟环境 创建虚拟环境 - 命令行 介绍 操作 基本问题 Pycharm 项目虚拟环境 django虚拟环境【安装django最新版本】 django虚拟环境【安装指…

L1-060 心理阴影面积(Java)

这是一幅心理阴影面积图。我们都以为自己可以匀速前进&#xff08;图中蓝色直线&#xff09;&#xff0c;而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工&#xff08;图中的红色折线&#xff09;。由红、蓝线围出的面积&#xff0c;就是我们在做作业时的心理阴影面积。 现…

认识并使用Shiro技术

认识并使用Shiro 一、对Shiro的基本认知1、Shiro是什么&#xff1f;2、Shiro的核心组件是&#xff1f;2.1 Subject2.2 UsernamePasswordToken2.3 Realm&#xff08;重点是&#xff1a;AuthorizingRealm用于授权、AuthenticatingRealm用于认证&#xff09;2.4 SecurityManager2.…

OpenCV-Python(49):图像去噪

目标 学习使用非局部平均值去噪算法去除图像中的噪音学习函数cv2.fastNlMeansDenoising()、cv2.fastNlMeansDenoisingColored等 原理 在前面的章节中我们已经学习了很多图像平滑技术&#xff0c;比如高斯平滑、中值平滑等。当噪声比较小时&#xff0c;这些技术的效果都是很好…

基数(桶)排序

目录 基数排序 实现步骤 完整代码 基数排序 核心思想&#xff1a;统计原数组中某个元素在该数组中出现的次数 优点&#xff1a;效率极高&#xff0c;时间复杂度为O&#xff08;aN countN(范围)&#xff09; 缺点&#xff1a;不适合分散的数据&#xff0c;更适合集中数据…

ts中 any 和 unknown 有什么区别,分别什么时候使用

any 和 unknown 都是顶级类型 top type&#xff0c;也就是所有类型的父类型 &#xff08;1&#xff09;any代表任意类型&#xff0c; 是不做任何检查&#xff0c;相当于不使用 ts&#xff0c;不建议使用&#xff0c;使用 a as any as string 之类的&#xff0c;可以让类型检查…

[全连接神经网络]Transformer代餐,用MLP构建图像处理网络

一、MLP-Mixer 使用纯MLP处理图像信息&#xff0c;其原理类似vit&#xff0c;将图片进行分块(patch)后展平(fallten)&#xff0c;然后输入到MLP中。理论上MLP等价于1x1卷积&#xff0c;但实际上1x1卷积仅能结合通道信息而不能结合空间信息。根据结合的信息不同分为channel-mixi…

知识图谱KG+大模型LLM

LLM-based KG KnowLM OpenSPGKG-based RAG 基本原理 从query出发的语义解析 pre-LLM方法 思想&#xff1a;直接将问题解析为对应的逻辑表达式&#xff0c;然后到知识图谱中查询。 方法&#xff1a;通常包含逻辑表达式、语义解析算法、语义解析模型训练三部分。一般步骤是将问句…

小程序定制开发流程

小程序定制开发是指根据客户的具体需求和业务场景&#xff0c;为其量身定制开发小程序的过程。以下是小程序定制开发的一般流程&#xff1a; 需求分析&#xff1a;与客户沟通&#xff0c;了解其业务需求、目标用户、功能要求等&#xff0c;明确小程序的定位和功能。 设计规划&…

【Kafka】Linux本地和Docker安装Kafka

目录 Linux本地安装kafkajava环境配置Zookeeper的安装配置Kafka的安装与配置生产与消费 Docker安装kafkaZookeeper安装Kafka安装 Linux本地安装kafka java环境配置 1、上传jdk-8u261-linux-x64.rpm到服务器并安装&#xff1a; rpm -ivh jdk-8u261-linux-x64.rpm2、配置环境变…

深度学习(4)--Keras实战

一.Keras基础概念 1.1.Keras是什么 Keras是深度学习中的一个神经网络框架&#xff0c;是一个高级神经网络API&#xff0c;用Python编写&#xff0c;可以在TensorFlow&#xff0c;CNTK或Theano之上运行。 Keras优点&#xff1a; (1). 允许简单快速的原型设计&#xff08;用户…

【C++】用wxWidgets实现多文档窗体程序

一、基本步骤和示例代码 在wxWidgets中&#xff0c;要实现多文档窗体程序&#xff0c;通常会使用wxMDIParentFrame和wxMDIChildFrame类来创建一种标准的MDI&#xff08;多文档接口&#xff09;应用。以下是基本步骤和示例代码&#xff0c;演示如何使用wxWidgets创建多文档界面…