rust使用vec在遍历时删除元素 需求: 工作中有一个地方需要用到在遍历时把不符合条件的元素删除掉, 比如一个vec中是原始数据是 vec![1,2,3,3,4,5] ,然后我要在遍历中把等于c的元素删除掉,目的是得到vec![1,2,4,5] 第一次错误尝试 由于最开始只知道移除元素用remove方法,所以最开始
我之前在网上学习使用rust编写操作系统,需要使用rust的版本是nightly,我安装的版本是stable版本,这里介绍一下如何快速切换到nightly版本 使用rustup查看已经安装版本 $ rustup toolchain list stable-x86_64-unknown-linux-gnu (default) 安装切换nightly版本 $ rustup default ni
Wall Clock vs Monotonic Clock (墙上时钟 vs 单调时钟) 墙上时钟指的是我们日常意义上的时间,正如墙上的时钟代表的时间一样。单调时钟指的是某个时间点后开始计算的时间,单纯意义上的代表的时间是没有意义的。 操作系统上相对应的提供了两套时间,分别对应墙上时钟和单调时钟,操作系
文章目录 特点声明,初始化常用方法 特点 长度固定,不能是变量元素类型一致 声明,初始化 声明,同时赋初值。 let a: [i32; 4] = [1, 2, 3, 4]; for b in a { print!("{}+", b); } //i32为元素类型,4为长度。 简写。 let a = [1, 2, 3, 4]; for b in a { print!("{}+", b); }
Cell与RefCell 的相同点:绕开所有权的限制,实现内部可变性性 rust 的所有权规则: 只能由一个可变引用 允许存在多个不可变引用 fn modify(a: &mut i32) { *x = *x + 1; } fn main() { let a = 111; modify(&mut a); } 变量a定义成一个不可变的变量,不能用于modi
Stack vs Heap(栈内存 vs 堆内存) Stack(后进先出,LIFO) Stack上的数据必须拥有已知的固定的大小 大小未知的数据或运行时大小可能发生变化的数据必须存放在heap上 String类型 //创建String类型的值 使用from函数 let s = String::from("hello"); 这类字符串可以被修改 fn main()
Error Handling in Rust 译文(Rust 中的错误处理) 原文链接:https://blog.burntsushi.net/rust-error-handling/ 原文作者:Andrew Gallant 译文来自:https://github.com/suhanyujie/article-transfer-rs/ 译者:suhanyujie 译者博客:suhanyujie ps:水平有限,翻译不当之处,还请指正。 标签:Ru
[source.crates-io] registry = “https://rsproxy.cn” 具体在.cargo下config文件中:
资源:内存区块。不同的内存区块位置和大小就是不同的资源。 strlet a = "xxx".to_string(); 含义:a绑定到字符串资源A上,拥有资源A的所有权 let mut a = "xxx".to_string(); 含义:a绑定到字符串资源A上,拥有资源A的所有权,同时a还可绑定到新的资源上面去(更新绑定的能力,但新旧资源类
使用 enum 定义枚举类型。 比如,通过 enum 声明一个名为 IpAddrKind 的枚举,其包含所有可能的 IP 地址种类 —— V4 和 V6,在 Rust 中 V4 和 V6 这些枚举可能 出现的情况被称为 枚举变体(variant): enum IpAddrKind { V4, V6, } 创建枚举类型的实例: let four = IpAddrKind::V4;
除了 方法,Rust块还允许我们定义不用接收 self 作为参数的函数。由于这类函数与结构体相互关联,所以它们也被称为 关联函数(associated function)。我们将其命名为函数而不是方法,是因为它们不会作用域某个具体的结构体实例。比如,曾经接触过的 String::from 就是关联函数的一种。 关联
使用 fn 关键字声明 方法 (与 函数 相似)。 方法与函数的区别是:方法总是被定义在某个结构体(或者枚举类型、trait对象)的上下文中,并且它们的第一个参数永远是 self ,用于指代调用该方法的结构体实例。 定义方法的格式: impl 结构体名 { 方法 } 示例程序: #[derive(Debug)] struct Us
Rust为结构体提供了打印调试信息的功能,但是默认不启用。要启用这个功能,需要在结构体定义前添加注解: #[derive(Debug)] 然后再使用 {:?} 或 {:#?}(后者更易读一些) 在 println! 中输出。 示例程序: #[derive(Debug)] struct User { name: String, age: u32, } fn main() {
#[cfg] #[cfg]允许我们基于一个传递给编译器的标记编译代码。它有两种形式: #[cfg(foo)] fn foo(){ } #[cfg(bar="baz")] fn bar(){ } 它还有一些帮助选项: #[cfg(any(unix,target_pointer_width = "32"))] pub fn foo(){ } #[cfg(all(unix,windows))] pub fn bar(){ } #[cfg(
字段初始化简写(field init shorthand):在字段名与变量名相同时,不需要使用 字段名: 变量名 的形式,而直接使用 字段名 的形式。 示例程序: struct User { username: String, email: String, sign_in_count: u64, active: bool, } fn build_user(username: String, ema
我们在定义一个新的结构体变量时可以使用已有的成员的属性来更新。 下面的程序使用 结构体更新语法 根据其他结构体实例创建新的结构体实例。 示例程序: struct Student { name: String, chinese: u32, math: u32, science: u32, english: u32 } fn main() {
Rust 中使用 struct 关键字定义并实例化结构体。 示例程序: struct User { username: String, email: String, sign_in_count: u64, actice: bool, } fn main() { let user1 = User { username: String::from("yuyoubei"), email: String::fr
01《 Rust 入门基本原理-2 》| Vol. 26 分享主题:《Rust 入门基本原理-2》| Vol. 26 分享讲师: 苏林 分享时间: 周日晚上 2021-12-26 20:30-21:30 腾讯会议地址: https://meeting.tencent.com/dm/mlhs6YsYuFRb 会议 ID: 258 663 900 课程介绍: 1、所有权机制。 2、借用和生命周期的理解
###安装涉及的概念rustup : 安装rust和管理版本的工具,当前rust尚处于发展阶段,存在三种类型的版本,稳定版、测试版、每日构建版本,使用rustup可以在这三种的版本之间切换,默认是稳定版本。通过rustup可以安装rustc、cargo等工具。cargo: rust的代码组织管理工具,提供了一些列的工具
示例程序: fn main() { let mut s = String::from("hello"); make_yuyoubei(&mut s); println!("{}", s); // 输出 yuyoubei } fn make_yuyoubei(s: &mut String) { *s = String::from("yuyoubei"); } 使用使用 &mut 来修饰函
& 代表引用语义,它允许你在不获取变量的所有权的情况下使用值。 借用(borrowing):用过 引用 传递参数给函数的过程。 引用默认是不可变的。 示例程序: fn main() { let s = String::from("yuyoubei"); let len = get_len(&s); println!("len = {}", len); // 输出 len =
Rust中在函数返回值的时候也会发生作用域的转移。 示例程序: fn main() { let s1 = gives_ownership(); let s2 = String::from("hello"); let s3 = takes_and_gives_back(s2); } fn gives_ownership() -> String { let some_string = String::from("yuyoubei"
示例程序: fn main() { let s = String::from("yuyoubei"); // 变量s进入作用域 takes_ownership(s); // s的值被移进了函数,所以它从这里开始不再有效 let x = 5; // 变量x进入了作用域 makes_copy(x);
接上一篇继续,今天来学习下如何用axum实现websocket,代码如下: Cargo.toml添加依赖项 [package] name = "websocket" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [depend
示例程序: fn main() { let s1 = String::from("yuyoubei"); let s2 = s1; println!("s1 = {}", s1); } 运行这段程序会报错,报错信息如下: error[E0382]: borrow of moved value: `s1` --> src\main.rs:4:25 | 2 | let s1 = String::from("yuy