1. 引言
上一篇文章中我们已经用 Rust 运行了 Hello World 程序,那么,接下来我们就来学习一下 Rust 的基础语法。
2. 标准输出
上一篇文章中,我们已经看到了 Rust 标准输出的例子:
代码语言:javascript复制fn main() {
let a = 12;
println!("a is {}", a);
}
2.1 输出函数
Rust 标准输出函数有两个:
- println!()
- print!()
两个的区别仅在于是否在末尾加上换行符。
2.2 占位符
上面的例子中,在输出参数中存在一个占位符 {},用来指代后面参数列表中的参数:
代码语言:javascript复制println!("a is {}, a again is {}", a, a);
在这个例子中,参数列表中的 a 出现了两次,看起来有些冗余,rust 允许在 {} 中加入数字来进行对参数列表进行索引:
代码语言:javascript复制println!("a is {0}, a again is {0}", a);
如何转义占位符,从而能够输出 {} 呢?
代码语言:javascript复制println!("{{}}");
这样就会输出:
{}
3. Rust 的变量
3.1 变量
在本文的第一个例子中,我们看到了 let
关键字。它用来声明变量:
let a = 123;
变量 a 在此声明之后,便拥有了类型,但我们并不能更改 a 的值,因为 a 并不是一个可变变量。
如果想让 a 被重新赋值,那么就需要用另一个关键字 mut
将变量标记为可变:
let mut a = 123;
a = 456;
但是要记住,a 是有类型的,即便 a 是可变的,仍然不能为 a 赋予其他类型的值。
3.2 重影
尽管不可变变量不能被重新赋值,但它是可以被重新声明的,通过重新声明可以重新绑定这一变量,从而为变量赋予新的值。
代码语言:javascript复制fn main() {
let a = 123;
let a = "xyz";
println!("The value of a is {}", a);
}
例如你可以这样使用重影机制:
代码语言:javascript复制fn main() {
let x = 5;
let x = x 1;
let x = x * 2;
println!("The value of x is: {}", x);
}
会输出:
The value of x is: 12
4. Rust 数据类型
和其他语言类似,Rust 中数据类型也分为以下几个类型:
- 整型
- 浮点型
- 布尔型
- 字符型
- 数组类型
4.1 整型
位长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
isize 和 usize 两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台。
整型数的不同进制的写法有以下几种:
进制 | 例 |
---|---|
十进制 | 98_222 |
十六进制 | 0xff |
八进制 | 0o77 |
二进制 | 0b1111_0000 |
字节(只能表示 u8 型) | b'A' |
可以在变量声明时指定变量类型:
代码语言:javascript复制fn main() {
let x:i32 = 123;
}
4.2 浮点型
浮点型分为 32 位浮点数 f32 和 64 浮点数 f64。
代码语言:javascript复制fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
4.3 布尔型
布尔型有两个取值:
- true
- false
4.4 字符型
Rust 中的字符型用 char 表示,大小为 4 字节,中文字符串则强制使用 UTF-8 编码。
4.5 数组与元组
与其他语言非常类似,数组和元组就是一组数据的集合。
- 需要注意的是,rust 中的数组和元组的元素都是不可变的,也就是说声明后不能更新数组或元组中的某个元素。
1. 元组
元组是通过一堆括号包括的一组数据,可以拥有不同的数据类型:
代码语言:javascript复制let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 等于 500
// tup.1 等于 6.4
// tup.2 等于 1
let (x, y, z) = tup;
// y 等于 6.4
2. 数组
数组使用方括号包括的一组数据,这些数据必须是相同类型:
代码语言:javascript复制let a = [1, 2, 3, 4, 5];
5. 数学运算
rust 支持基本的数学运算,如:
- 加:
- 减:-
- 乘:*
- 除:/
- 取余:%
- 赋值数学运算: =、-= 等
- Rust 不支持 与 -- 操作
6. 注释
和许多其他语言一样,Rust 支持下面的三种注释:
代码语言:javascript复制// 这是第一种注释方式
代码语言:javascript复制/* 这是第二种注释方式 */
代码语言:javascript复制/*
* 多行注释
* 多行注释
* 多行注释
*/
除此以外,rust 还有一种特殊的用于说明文档的注释:
代码语言:javascript复制/// Adds one to the number given.
///
/// # Examples
///
/// ```
/// let x = add(1, 2);
///
/// ```
fn add(a: i32, b: i32) -> i32 {
return a b;
}
fn main() {
println!("{}",add(2,3));
}
Cargo 的 cargo doc 功能可以自动将文档书名注释变成 html 格式的说明文档。