Skip to content

Rust基本语法

rust #基础

在 Rust 中,变量默认是不可变的。在变量前加 mut 使其可变。

let apples = 5; // 不可变
let mut bananas = 5; // 可变

猜数字游戏

use std::io;

fn main() {
    println!("Guess the number!");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {guess}");
}
use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);

    loop {
        println!("Please input your guess.");

        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        println!("You guessed: {guess}");

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}

基本数据类型

整型 无符号整型 浮点型
i8 u8
i16 u16
i32 u32 f32
i64 u64 f64
i128 u128

char: 为utf8编码,可以使用汉字、emoji

bool: 不能用01替代表示

元组(tuple)

let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x,y,z) = tup;
println!("The value of y is: {}",y);

let five_hundred = tup.0;
let one = tup.2;

[!note] 元组的遍历(可能有误) rust for value in tuple.0..=tuple.2 { println!("value is: {}",value) }

数组(array)

let a = [1, 2, 3, 4, 5];
let a:[i32;5] = [1, 2, 3, 4, 5];
let a = [3;5] // let a = [3, 3, 3, 3, 3];

let first = a[0];

浮点数转整数

let a = 3.14;
let b = a as i32;

函数

表达式拥有返回值,而语句没有

fn print() {
    println!("Hello");
}

fn print_c_value(c: char, value: i32) {
    println!("c:{c} value:{value}");
}

fn return_value() -> i32 {
    5
}

fn return_value_2(x: i32) -> i32 {
    x+1 // 不能加分号
}

逻辑结构

if-else

// condition 必须为bool值,不能为0或1
if x == 3 {

} else if x > 3 {

} else if x < 3 {

}

loop

let mut counter = 0;
loop {
    counter += 1;
    if counter == 10 {
        println!("counter is {}", counter)
    }
}

从循环返回值

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("The result is {result}");
}

The result is 20

loop-lable 标签: ' + name

fn main() {
    let mut count = 0;
    'counting_up: loop {
        println!("count = {count}");
        let mut remaining = 10;
        loop {
            println!("remaining = {remaining}");
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'counting_up;
            }
            remaining -= 1;
        }
        count += 1;
    }
    println!("End count = {count}");
}

while

while x != 0 {
    x -= 1;
}

for

let a = [10, 20, 30, 40, 50];
for element in a {
    println!("the value is: {element}");
}

for in range

for number in (1..4).rev() { // 这个number默认是mut的
    println!("{number}!");
}
println!("LIFTOFF!!!");

后:2.所有权