You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
2.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Rust基本概念
从现在开始我们正式踏入了Rust大陆这篇广袤而神秘的世界在这个世界中将接触到很多之前都没有听过的概念
- 所有权、借用、生命周期
- 宏编程
- 模式匹配
类似的还有很多,不过不用怕,引用武林外传一句话:咱上面有人。有本书在,一切虚妄终将烟消云散。
本章主要介绍Rust的基础语法、数据类型、项目结构等学完本章你将对Rust代码有一个清晰、完整的认识。
开始之前先通过一段代码来简单浏览下Rust的语法:
```rust
// rust程序入口函数跟其它语言一样都是main该函数目前无返回值
fn main() {
// 使用let来声明变量进行绑定a是不可变的
// 此处没有指定a的类型编译器会默认根据a的值为a推断类型i32有符号32位整数
// 语句的末尾必须以分号结尾
let a = 10;
// 主动指定b的类型为i32
let b: i32 = 20;
// 这里有两点值得注意:
// 1. 可以在数值中带上类型:30i32表示数值是30类型是i32
// 2. c是可变的mut是mutable的缩写
let mut c = 30i32;
// 还能在数值和类型中间添加一个下划线,让可读性更好
let d = 30_i32;
// 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
let e = add(add(a, b), add(c, d));
// println!是宏调用,看起来像是函数但是它返回的是宏定义的代码块
// 该函数将指定的格式化字符串输出到标准输出中(控制台)
// {}是占位符在具体执行过程中会把a的值代入进来
println!("( a + b ) + ( c + d ) = {}", e);
}
// 定义一个函数输入两个i32类型的32位有符号整数返回它们的和
fn add(i: i32, j: i32) -> i32 {
// 返回相加值这里可以省略return
i + j
}
```
> 注意
>在上面的`add`函数中,不要为`i+j`添加`;`,这会改变语法导致函数返回`()`而不是`i32`,具体参见[语句和表达式](./base-type/statement-expression.md)
有几点可以留意下:
- 字符串使用双引号`""`而不是单引号`''`, Rust中单引号是留给单个字符类型(`char`)使用的
- Rust使用`{}`来作为格式化输出占位符,其它语言可能使用的是`%s``%d`,`%p`等,由于`println!`会自动推导出具体的类型, 因此无需手动指定