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 { // A ... 阅读更多
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` 方法返回一个可显示的结构 let display = path.display(); // 检查路径是否存在 if path.exists() { println!("{} exists", display); } ... 阅读更多