1. 按照指示,安装 rustlings,并使用 VS Code + Rust Analyzer

https://rustlings.rust-lang.org/setup/#installing-rust

00_intro - macro

println!(r#" Welcome to... "#);

Q: 这个 print 语句,为什么有个感叹号?好搞笑

A:Rust 里的 println! 确实和你熟悉的 System.out.println(Java)或者 console.log(TypeScript)不一样——因为它后面多了个 感叹号 !

✅ 原因:println! 是一个 宏(macro)

在 Rust 里:

  • 没有 ! 的是 函数调用
  • ! 的是 宏调用

宏有点像 Lombok 注解(@Getter, @Builder)泛型擦除前的模板代码

为什么 Rust 要宏?

Rust 没有运行时反射(不像 Java),也没有动态元编程(不像 JS/TS)。
但 Rust 需要“写一份代码 → 适配多种情况”,所以就靠 宏在编译期生成

Intro 2

将错误的宏名称修改成正确的即可。

01_Variables 变量

在默认情况下,使用let 关键字声明的rust 变量是不可变的

by default, variables are immutable.

可变性:通过 mut 关键字声明

  • variables 1 补充类型声明的关键字 let 即可

  • Variables 2 补充赋值语句,并加上 mut 声明

可变性

可变性是完全取决于你的。 Constants : 常量,与不可变变量一样

与不可变变量区别:不仅是默认不可变,而且总是不可变的,值的类型必须进行注释。常量命名规则:全部大写,且在单词之间使用下划线。

遮蔽 Shadowing

遮蔽规则(shadowed): 第二个变量遮蔽第一个变量(大括号中的变量赋值,在作用域结束后回退。)

fn main() {
    let x = 5;
 
    let x = x + 1;
 
    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }
 
    println!("The value of x is: {x}");
}

遮蔽与将变量标记为 mut 不同。1. 遮蔽使得可以重新赋值变量、对变量进行转换,而这些转换完成后,变量依然是不可变的。2. 重新使用 let 变量进行声明,实质上是再次创建了一个新变量,可以更改值的类型。而 mut 不能改类型。