684 次浏览
我们知道进程是正在运行的程序。操作系统同时维护和管理多个进程。这些进程在独立的部分运行,这些独立的部分称为线程。Rust 提供了 1:1 线程的实现。它提供了不同的 API 来处理线程创建、连接和许多此类方法。使用 spawn 创建新线程要在 Rust 中创建新线程,我们调用 thread::spawn 函数,然后传递一个闭包,该闭包又包含我们想要在新线程中运行的代码。示例请考虑以下示例:use ... 阅读更多
288 次浏览
Rust 中的 Use 声明用于将完整路径绑定到新名称。在完整路径有点长而难以编写和调用的情况下,这非常有用。在正常情况下,我们习惯于这样做:use crate::deeply::nested::{ my_function, AndATraitType }; fn main() { my_function(); }我们通过函数 my_function 的名称调用 use 声明函数。Use 声明还允许我们将完整路径绑定到我们选择的新的名称。示例请考虑以下示例:// 将 `deeply::nested::function` 路径绑定到 `my_function`。 use deeply::nested::function as my_function; ... 阅读更多
179 次浏览
当我们想要忽略 Rust 提供的规范时,就会执行不安全操作。我们可以使用不同的不安全操作,主要包括:解引用原始指针访问或修改静态可变变量调用不安全函数或方法尽管 Rust 不建议我们根本使用不安全操作,但我们只应在想要绕过编译器设置的保护时才使用它们。原始指针在 Rust 中,原始指针 * 和引用 &T 执行几乎相同的事情,但引用始终是安全的,因为编译器保证它们指向... 阅读更多
527 次浏览
每当我们想要删除想要调用的函数冗长的导入路径(来自同一个函数或不同的模块)时,我们可以使用 Rust 提供的 super 和 self 关键字。这些关键字有助于消除访问项目时的歧义,并防止不必要的路径硬编码。示例请考虑以下简单示例:fn function() { println!("called `function()`"); } mod cool { pub fn function() { println!("called `cool::function()`"); } } mod my { fn function() { println!("called `my::function()`"); ... 阅读更多
556 次浏览
Rust 中的结构体是用户定义的数据类型。它们包含用于定义其特定实例的字段。我们使用 struct 关键字后跟我们想要为结构体命名的名称来定义结构体。结构体的名称应该描述我们在此结构体中组合在一起的数据片段的意义。语法struct Employee { id: i32, name: String, leaves: i8, }上述语法包含结构体的名称,在大括号内,我们有不同的字段,即 id(类型为 i32)、name 和 leaves。创建实例要创建... 阅读更多
1K+ 次浏览
Rust 中的结构体包含额外的可见性级别。开发人员可以根据自己的方便修改这些级别。在正常情况下,Rust 中结构体的可见性是私有的,可以通过使用 pub 修饰符将其设为公有。应该注意的是,这种可见性情况只有在我们尝试从定义它的模块外部访问结构体字段时才有意义。当我们隐藏结构体的字段时,我们只是试图封装数据。示例请考虑以下示例:mod my { // 一个... 阅读更多
190 次浏览
Rust 中的切片是相同数据类型 T 的元素集合,但与数组不同,其长度不必在编译时已知。在 Rust 中,切片是一个两词对象,其中第一个词实际上是指向数据的指针,第二个词只是切片的长度。切片比数组更安全,它们允许高效地访问数组而无需复制。切片是从数组、字符串创建的。它们可以是可变的,也可以不是。切片通常指的是数组或... 的切片 阅读更多
140 次浏览
Rust 中会发生两种类型的错误,即可恢复错误或不可恢复错误。我们使用 panic!宏来处理不可恢复的错误,而 Result 类型以及其他类型则有助于处理可恢复的错误。Result 类型是 Option 类型的改进版本,它只描述可能的错误,而不是可能的缺失。签名Result 类型的签名是 Result < T, E>,它只有两种结果。它们是:Ok(T):找到了元素 T。Err(E):找到了带有元素 E 的错误。Rust 还提供了我们可以与... 关联的不同方法 阅读更多
65 次浏览
处理在运行时传递的参数是任何编程语言的关键功能之一。在 Rust 中,我们使用 std::env::args 来访问这些参数,它返回一个迭代器,为每个传递的参数提供一个字符串。示例请考虑以下示例:use std::env; fn main() { let args: Vec = env::args().collect(); // 第一个参数是用于调用程序的路径。 println!("我的当前目录路径是 {}。", args[0]); println!("我获得了 {:?} 个参数:{:?}。", args.len() - 1, &args[1..]); }我们可以像这样传递参数:./args 1 2 3 4 ... 阅读更多
368 次浏览
Rust 中的 Path 结构体用于表示底层文件系统中的文件路径。还应该注意的是,Rust 中的 Path 不是表示为 UTF-8 字符串;而是存储为字节向量 (Vec)。示例请考虑以下示例:实时演示use std::path::Path; fn main() { // 从 `&'static str` 创建一个 `Path` let path = Path::new("."); // `display` 方法返回一个 `Show`able 结构 let display = path.display(); // 检查路径是否存在 if path.exists() { println!("{} exists", display); } ... 阅读更多