Rust 关键字与语法详解

Rust 语法与关键字字典:含语言关键字与等价惯用法(如 ? 运算符、生命周期)。

1. let / let mut / const

描述

绑定默认不可变;mut 开可变;const 编译期需标类型。

语法和示例

let x = 5;
let mut y = 0;  y += 1;
const MAX: u32 = 100;
static NAME: &str = "app";        // 程序级静态
let shadowed = 5;
let shadowed = shadowed * 2;      // 遮蔽可换类型

2. fn – 函数

描述

snake_case;参数模式匹配;返回值即尾表达式或 return。

语法和示例

fn add(a: i32, b: i32) -> i32 { a + b }
fn no_return() {}                  // 隐式返回 ()
fn never() -> ! { loop {} }        // 永不返回
fn swap((a, b): (i32, i32)) -> (i32, i32) { (b, a) }
fn generic<T: Clone>(x: T) -> T { x.clone() }

3. struct / impl

描述

具名结构体;impl 块加方法;关联函数(无 self)像静态方法。

语法和示例

struct User { name: String, age: u8 }
impl User {
    fn new(name: impl Into<String>) -> Self {      // 关联函数
        Self { name: name.into(), age: 0 }
    }
    fn birthday(&mut self) { self.age += 1; }       // &mut self
    fn name(&self) -> &str { &self.name }
}
let mut u = User::new("Li");
u.birthday();

4. enum / match

描述

代数数据类型;match 穷尽;match 必须覆盖全部或 _。

语法和示例

enum Msg {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
}
let n = match msg {
    Msg::Quit => 0,
    Msg::Move { x, y } => x + y,
    Msg::Write(s) if s.len() > 5 => 1,    // 守卫
    Msg::Write(_) => 2,
};

5. Option – 可选值

描述

Some/None; unwrap_or 家族与 ? 传播。

语法和示例

let v: Option<i32> = Some(5);
v.unwrap();           // None 崩
v.unwrap_or(0);  v.unwrap_or_default();
v.map(|x| x * 2);
v.ok_or("缺值")?;      // 转 Result 再传播
if let Some(x) = v { }
let Some(x) = v else { return; };

6. Result 与 ?

描述

? 自动 return Err 并 From 转换;链式调用的基石。

语法和示例

fn read(p: &str) -> Result<String, std::io::Error> {
    std::fs::read_to_string(p)          // 直接返回
}
let s = read("a")?;
// main 也可返回 Result:
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let s = read("a")?;  Ok(())
}

7. trait – 特征

描述

共享行为契约;默认实现;derive 派生常用 trait。

语法和示例

trait Speak { fn say(&self) -> String; }
impl Speak for Dog {
    fn say(&self) -> String { "woof".into() }
}
#[derive(Debug, Clone, PartialEq, Default)]
struct P { x: i32 }
// Display 手写后可 to_string()
impl std::fmt::Display for P {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "P({})", self.x)
    }
}

8. 泛型与 impl Trait

描述

静态单态化 vs dyn 动态分发;语法糖 impl T。

语法和示例

fn show<T: Speak>(x: &T) {}          // 泛型(静态)
fn show2(x: &dyn Speak) {}          // trait 对象(动态)
fn show3(x: impl Speak) {}          // 糖
fn make() -> impl Iterator<Item=i32> { (0..3).map(|x| x * 2) }

9. 生命周期 ‘a

描述

标注引用存活关系;三条省略规则覆盖多数;struct 持引用必须标。

语法和示例

fn longest<'a>(a: &'a str, b: &'a str) -> &'a str {
    if a.len() > b.len() { a } else { b }
}
struct Parsed<'a> { src: &'a str }
impl<'a> Parsed<'a> { fn new(s: &'a str) -> Self { Self { src: s } } }
// 'static:整程序存活(字符串字面量)

10. 闭包

描述

三类 trait(Fn/FnMut/FnOnce);move 夺取所有权。

语法和示例

let g = "hi".to_string();
let take = move || println!("{g}");       // g 移入
let add = |a: i32, b: i32| a + b;
let mut count = 0;
let mut incr = || count += 1;             // FnMut 捕获可变

11. 所有权转移与借用

描述

= 与传参默认 move;&/&mut 借用规则;Copy 例外。

语法和示例

let s1 = String::from("hi");
let s2 = s1;                    // s1 失效
let r1 = &s2;  let r2 = &s2;   // 多个不可变 OK
// let m = &mut s2;            // 与 r1 冲突
let n = 5;  let m = n;          // i32 Copy:都可用

12. unsafe 边界

描述

裸指针解引用、unsafe fn 调用、static mut、union——包安全 API 在内。

语法和示例

let raw = &x as *const i32;
unsafe { println!("{}", *raw); }
unsafe fn legacy() {}
unsafe { legacy() }
// extern "C" fn export() {}   // FFI 暴露

13. 宏

描述

macro_rules 声明宏;derive 过程宏;常用内置宏清单。

语法和示例

vec![1, 2, 3];  println!("{}", x);  format!("{:.2}", v);
assert_eq!(a, b);  dbg!(&x);  todo!();  unimplemented!();
matches!(x, Some(_));
write!(f, "text")?;
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇