首页 > 其他分享 >Rust语言学习再理解

Rust语言学习再理解

时间:2023-08-24 10:57:42浏览次数:47  
标签:语言 迭代 trait MyStruct iter collect 理解 data Rust

利用ChatGPT辅助学习,对初学者懂其晦涩语法很方便

use std::iter::IntoIterator;

struct MyStruct {
  data: Vec<u32>
}

impl MyStruct {
  // This has the same name as `std::iter::FromIterator::from_iter`
  fn from_iter(iter: impl IntoIterator<Item = u32>) -> Self {
    Self {
      data: iter.into_iter().collect()
    }
  }
}

impl std::iter::FromIterator<u32> for MyStruct {
    fn from_iter<I: IntoIterator<Item = u32>>(iter: I) -> Self {
      Self {
        data: iter.into_iter().collect()
      }
    }
}

这段代码定义了一个自定义结构体`MyStruct`,其中包含一个字段`data`,它是一个存放`u32`类型数据的向量(Vector)。

然后,代码实现了一个名为`from_iter`的关联函数,它有一个名为`iter`的参数,参数类型为实现了`IntoIterator` trait 的类型,且该迭代器的元素类型为`u32`。该函数的作用是将迭代器中的元素收集到`data`字段中,并返回一个新的`MyStruct`实例。

接下来,代码实现了`std::iter::FromIterator<u32>` trait,其中的`from_iter`函数与之前的`from_iter`函数相同,只是实现了一个不同的trait。这个trait是标准库中的一个trait,它允许对实现了`IntoIterator<Item = T>` trait 的迭代器类型调用`collect`方法来生成一个新的实例。

使用这段代码,可以这样创建一个`MyStruct`实例:

rust:
let my_struct: MyStruct = vec![1, 2, 3].into_iter().collect();

其中,`vec![1, 2, 3]`创建了一个整型向量`Vec<u32>`,然后调用`into_iter`方法将其转换为一个迭代器,并最后调用`collect`方法将迭代器中的元素收集到一个新的`MyStruct`实例中。

Additions to the prelude - The Rust Edition Guide (rust-lang.org)

标签:语言,迭代,trait,MyStruct,iter,collect,理解,data,Rust
From: https://www.cnblogs.com/shiningleo007/p/17653606.html

相关文章

  • 《Windows 汇编语言入门教程》 -- 系列教程
    5.12汇编语言:仿写While循环语句5.11汇编语言:仿写IF条件语句5.10汇编语言:汇编过程与结构5.9汇编语言:浮点数操作指令5.8汇编语言:汇编高效除法运算5.7汇编语言:汇编高效乘法运算5.6汇编语言:汇编高效数组寻址5.5汇编语言:函数调用约定5.4汇编语言:算数......
  • 5.10 汇编语言:汇编过程与结构
    过程的实现离不开堆栈的应用,堆栈是一种后进先出(LIFO)的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。栈是由CPU管理的线性内存数组,它使用两个寄存器(SS和ESP)来保存栈的状态,SS寄存......
  • 5.11 汇编语言:仿写IF条件语句
    条件语句,也称为IF-ELSE语句,是计算机编程中的一种基本控制结构。它允许程序根据条件的真假来执行不同的代码块。条件语句在处理决策和分支逻辑时非常有用。一般来说,条件语句由IF关键字、一个条件表达式、一个或多个代码块以及可选的ELSE关键字和对应的代码块组成。条件表达式的结果......
  • 5.12 汇编语言:仿写While循环语句
    循环语句(While)一种基本控制结构,它允许程序在条件为真的情况下重复执行一段代码块,直到条件为假为止。循环语句在处理需要重复执行的任务时非常有用,它可以让程序更加高效地处理大量数据或者重复性操作。一般来说,While循环由一个条件表达式、一个代码块组成。在每次循环迭代开始时,程......
  • 《深入理解Java虚拟机》读书笔记:运行时栈帧结构
    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。一、概述在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。在不同的虚拟机实现里面,执行引擎在执行Java代码的时......
  • [论文理解] HACK: Learning a Parametric Head and Neck Model for High-fidelity Ani
    HACK:LearningaParametricHeadandNeckModelforHigh-fidelityAnimation上科大发布的头和脖子精细建模的参数化模型HACK。纹理转化由于HACK没有开源纹理基,我将FLAME开源的纹理基迁移到了HACK上,代码在这里开源:https://github.com/aoru45/FLAME_TO_HACK/tree/main论文......
  • Go语言中的sync包
    Go语言的sync包提供了基本的同步原语,如互斥锁和条件变量。它被设计用来协调多个goroutine之间的工作,以便在访问共享资源或完成某些任务时不会发生竞争条件或其他并发相关的问题。以下是sync包中一些关键的组件和它们的用途:Mutex(互斥锁):sync.Mutex提供了基本的互斥锁......
  • c语言 指针的大小,void *
    @TOC前言变量有大小,同样指针也有它的大小。一、指针的大小:(一切指针都是如此)不同编译环境下,指针的大小不一样:32位编译环境下,是4字节64位编译环境下,是8字节二、指针的大小的演示:三、void*类型:通用指针类型:void*通用指针类型就是没有值具体类型,什么指针都可以装。例如:inta......
  • c语言的可重入和不可重入函数
    先贴上一篇优秀的博文链接:C语言之可重入函数和不可重入函数_c可重入函数_KiranWang的博客-CSDN博客  总结:不可重入函数的四种情况1.静态数据结构:如静态局部变量活全局变量2.malloc()或者free()函数因为这两个函数都会操作全局的链表,如果第一次malloc没结束时,再被一次malloc......
  • 解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题
    解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题LLM(LargeLanguageModel)通常拥有大量的先验知识,使得其在许多自然语言处理任务上都有着不错的性能。但,想要直接利用LLM完成一些任务会存在一些答案解析上的困难,如规范化输出格式,严格服从输入信息等。因此,在......