Rust基础语句
let
手册中关于let的介绍let - Rust
值得注意的有以下几点:
- 声明的变量默认无法移动(immutable),可使用mut关键字更改为mutable
- shadowing问题,可重复定义相同名字的变量,定义的类型可以不一样,最后定义的变量会shadow前面的同名变量。前面的变量并不会消失,在scope结束后会自动drop。
可以和if联用,if let语句,结合Optional,可用于模式匹配(pattern match)。类似用法还有while let。
if let Some(a) = b {
}
else {
}
基本数据类型
rust book对数据类型的介绍在这里Data Types - The Rust Programming Language
整数,浮点数,布尔,字符等
由基本数据类型可以组合成为以下类型
tuple,struct,array,enums
函数
函数可以用return返回结果,也可以在没有return时返回函数中最后一句(必须是表达式)的值。第二条适用于任何一个scope。
Rust不允许null指针相关,应使用option
Option
类似于C++中的optional类模板,需要null指针时应使用option
option相关介绍std::option - Rust,示例如下
fn divide(numerator: f64, denominator: f64) -> Option<f64> {
if denominator == 0.0 {
None
} else {
Some(numerator / denominator)
}
}
// The return value of the function is an option
let result = divide(2.0, 3.0);
// Pattern match to retrieve the value
match result {
// The division was valid
Some(x) => println!("Result: {x}"),
// The division was invalid
None => println!("Cannot divide by 0"),
}
循环
除for和while外,rust还使用loop关键字,loop循环可以在break时返回值,loop - Rust中的示例如下
let mut i = 1;
let something = loop {
i *= 2;
if i > 100 {
break i;
}
};
assert_eq!(something, 128);
标准输入输出
获取命令行参数,见args in std::env - Rust
use std::env;
// Prints each argument on a separate line
for argument in env::args() {
println!("{argument}");
}
获取输入,见Stdin in std::io - Rust
use std::io;
fn main() {
let pattern_string = std::env::args()
.nth(1) //第一个参数
.expect("missing required command-line argument: <pattern>"); //报错
let pattern = &pattern_string;
let mut input = String::new(); //buffer
loop {
match io::stdin().read_line(&mut input) {
Ok(n) => {
if n == 2 || n == 0 {
break;
} //n为输入长度
//空白行或eof则跳出loop
}
Err(error) => println!("error: {error}")
}
input.clear(); //清空buffer
}
}