Rust语法速查表
Rust语法速查表
语法汇总和速查表。
基本语法
类型
let a = 1; // 定义变量,默认不可变
let b: bool = true; // 明确指定变量类型
let mut x = 5; // 定义可变变量
const MAX_POINTS: u32 = 100_000; // 定义常量
let i:i32 = _f as i32; // 转数据类型
type Int = i32; // 用关键字 type 为i32类型创建别名Int
// Rust 的 never 类型( ! )用于表示永远不可能有返回值的计算类型。
#![feature(never_type)]
let x:! = {
return 123
};
// 对整行进行注释
/* .. 对区块注释 */
/// 生成库文档,一般用于函数或者结构体的说明,置于说明对象的上方
//! 也生成库文档,一般用于说明整个模块的功能,置于模块文件的头部
let tup: (i32, f64, u8) = (500, 6.4, 1); // 元组(tuple)
let (x, y, z) = tup; // 模式匹配(pattern matching)来解构元组值
(1,) // 当元组中只有一个元素时,需要加逗号,即
`()` // 空元组,
let arr: [i32; 3] = [1, 2, 3]; // 数组
assert_eq!((1..5), Range{ start: 1, end: 5 }); // 范围类型,左闭右开
assert_eq!((1..=5), RangeInclusive::new(1, 5)); // 范围类型,全闭
let arr: [i32; 5] = [1, 2, 3, 4, 5]; // 固定大小数组的切片
let arr = &mut [1, 2, 3]; // 可变数组的切片
let vec = vec![1, 2, 3]; // 使用 vec! 宏定义的动态数组的切片
let str_slice: &[&str] = &["one", "two", "three"]; // 字符串数组的切片
pub struct People { // Named-Field Struct
name: &'static str,
gender: u32,
} // 注意这里没有分号
let alex = People::new("Alex", 1); // 用 :: 来调用new方法,默认不可变
struct Color(i32, i32, i32); // 注意这里要有分号! Tuple-Like Struct,字段没有名字,只有类型
let color = Color(0, 1, 2); // 直接构造,不用new方法
struct Integer(u32); // 当元组结构体只有一个字段的时候,称为 New Type 模式
struct Empty; // 等价于 struct Empty {},单元结构体是没有任何字段的结构体。
enum Number { // 无参数枚举
Zero,
One,
Two,
}
enum Color { // 类C枚举
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
}
enum IpAddr { // 带参数枚举
V4(u8, u8, u8, u8),
V6(String),
}
let mut v1 = vec![]; // 用宏创建可变向量
let v2 = vec![0; 10]; // 用宏创建不可变向量
let mut v3 = Vec::new(); // 用 new 方法创建向量
let a = [1,2,3];
let b = &a; // 引用操作符 &,不可变,本质上是一种非空指针
let mut c = vec![1,2,3]; // 要获取可变引用,必须先声明可变绑定
let d = &mut c; // 通过 &mut 得到可变引用
let mut x = 10;
let ptr_x = &mut x as *mut i32; // 可变原始指针 *&mut T
let y = Box::new(20);
let ptr_y = &*y as *const i32; // 不可变原始指针 *const T
pub fn math(op: fn(i32, i32) -> i32, a: i32, b: i32) -> i32{ /// 将函数作为参数传递
op(a, b) /// 通过函数指针调用函数
}
fn true_maker() -> fn() -> bool { is_true } /// 函数的返回值是另外一个函数
let box_point = Box::new(Point { x: 0.0, y: 0.0 }); // 智能指针
流程处理
let big_n = if n < 10 && n > -10 { // if 不带括号,真不适应
10 * n
} else {
n / 2
};
for n in 1..101 {} // for … in 循环
while n < 101 {} // while 循环
loop { } // loop 循环,相当于一个 while true,需要程序自己 break