本系列是学习 Rust 的学习笔记,本编主要对 https://cheats.rs/ 的语法速查表进行翻译学习
定义代码单元及其抽象。
| 示例 | 说明 |
|---|---|
trait T {} | 定义一个特性; 通常用于其他类型可以实现的通用行为。 |
trait T : R {} | T是超特性R的子特性。任何S在实现T之前必须先实现R。 |
impl S {} | 为类型S实现的实现功能,例如方法。 |
impl T for S {} | 为类型S实现特性T。 |
impl !T for S {} | 禁用自动派生的自动特性。 |
fn f() {} | 定义一个函数; 或者如果在impl内部则是关联函数。 |
~~~~ fn f() -> S {} | 相同,返回类型为S的值。 |
~~~~ fn f(&self) {} | 定义一个方法,例如,在impl S {}内。 |
const fn f() {} | 在编译时可用的常量fn,例如,const X: u32 = f(Y)。 |
async fn f() {} | 异步函数转换,使f返回一个impl Future。 |
~~~~ async fn f() -> S {} | 相同,但使f返回一个impl Future<Output=S>。 |
~~~~ async { x } | 在函数内部使用,使{ x }成为一个impl Future<Output=X>。 |
fn() -> S | 函数指针,持有可调用的地址的内存。 |
Fn() -> S | 可调用特性(也有FnMut、FnOnce),由闭包、fn等实现。 |
| | {} | 一个闭包,借用其捕获(例如,一个局部变量)。 |
~~~~ |x| {} | 接受一个名为x的参数的闭包,主体是块表达式。 |
~~~~ |x| x + x | 相同,没有块表达式; 只能由单个表达式组成。 |
move |x| x + y | 拥有其捕获的闭包;即,y转移到闭包中。 |
return | true | 有时闭包看起来像逻辑或(这里: 返回一个闭包)。 |
unsafe | 如果你喜欢在周五晚上调试段错误; 不安全的代码。 |
~~~~ unsafe fn f() {} | 意味着“调用可能会导致UB,你必须检查要求”。 |
~~~~ unsafe trait T {} | 意味着“T的粗心实现可能导致UB;实现者必须检查”。 |
~~~~ unsafe { f(); } | 向编译器保证“我已经检查过要求,相信我”。 |
~~~~ unsafe impl T for S {} | 保证 S在T方面行为良好;人们可以安全地在S上使用T。 |
函数 & 行为 的简单示例:
-
特性(Traits)
- 特性是 Rust 中用于定义共享行为的一种机制。
- 示例:定义一个特性
Drawable,表示可绘制的对象,其中包含一个方法draw。
trait Drawable { fn draw(&self); } -
超特性(Supertraits)
- 超特性是一个特性可以继承其他特性的方法。
- 示例:定义一个特性
Shape,它继承了Drawable,表示形状对象。
trait Shape: Drawable { // 其他方法定义 } -
实现(Implementation)
- 实现是为类型提供特性的具体实现。
- 示例:为结构体
Circle实现Drawable特性。
struct Circle { // 结构体字段 } impl Drawable for Circle { fn draw(&self) { // 绘制圆形的具体实现 } } -
特性实现(Trait Implementation)
- 特性实现是为类型提供特性的具体实现。
- 示例:为结构体
Rectangle实现Shape特性。
struct Rectangle { // 结构体字段 } impl Shape for Rectangle { // 实现 Shape 特性的方法 } -
自动特性(Auto Traits)
- 自动特性是由编译器自动生成的一种特性。
- 示例:禁用自动实现
Send和Sync特性。
struct MyType; unsafe impl !Send for MyType {} unsafe impl !Sync for MyType {} -
函数定义和使用
- 函数是用于执行特定任务的代码单元。
- 示例:定义一个函数
add,用于求两个整数的和。
fn add(x: i32, y: i32) -> i32 { x + y } -
异步函数
- 异步函数是一种特殊类型的函数,可以在执行期间挂起并在后续恢复执行。
- 示例:定义一个异步函数
fetch_data,用于从远程服务器获取数据。
async fn fetch_data(url: &str) -> Result<String, Error> { // 异步请求数据并返回结果 } -
闭包
- 闭包是一种可以捕获其环境并在稍后执行的匿名函数。
- 示例:定义一个闭包,用于计算两个数字的和。
let add_closure = |x, y| x + y; let result = add_closure(3, 5); println!("Result: {}", result); // 输出:8
539



被折叠的 条评论
为什么被折叠?



