Rust学习笔记第2篇

2.1 猜数游戏:一次猜测

代码示例:

rust 复制代码
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);

}

首先我们声明了要使用标准库里面的io模块;然后第一次定义了一个变量guess,我们要注意Rust当中的变量默认都是immutable(一成不变)。如果我们需要声明一个变量,那么就需要使用mut关键字。

String是 Rust 标准库提供的动态字符串类型,它拥有所有权并且可以在堆上分配内存。String::new()是 String类型的一个关联函数(类似于静态方法),用于创建一个空的 String实例。

&mut是可变引用机制,引用允许你借用某个值而不获取其所有权。直接的引用在Rust当中默认也是不可变的。

{}是Rust中的占位符,一个{}就对应后面一个变量的值。

2.2 猜数游戏:生成神秘数字

下面这个命令可以帮我们在rust项目中添加库函数:

复制代码
cargo add <name>

命令的实际效果是修改Cargo.toml文件:

Cargo.lock文件在首次构建项目的时候就会出现。

rust 复制代码
use std::io;     //prelude
use rand::Rng;   //trait


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

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

    println!("The secret number is: {}", secret_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);

}

2.3 猜数游戏:比较猜测数字和神秘数字

rust 复制代码
use std::io;     //prelude
use rand::Rng;   //trait
use std::cmp::Ordering; //enum


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

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

    println!("The secret number is: {}", secret_number);

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

    let mut guess = String::new();

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

    //shadow机制可以隐藏变量,转变类型
    //第一个guess已经被隐藏了
    let guess: u32 = guess.trim().parse().expect("Please type a number!");

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

    }

}

这里的Ordering是一个枚举类型,代表数字比较的三种不同结果。

这里还涉及到了shadow机制,后续进行补充说明。

2.4 多次猜测

相关推荐
SomeB1oody1 小时前
【RustyML入门】7.3. 性能调优与并行
开发语言·后端·机器学习·rust·教程
苏灿烤鱼1 小时前
连庄+2,729,空降榜眼只+440
rust·openai·agent
小灰灰搞电子16 小时前
Rust+Slint 实现水波纹进度条源码分享
开发语言·rust
mounter62519 小时前
GCCRS 突破与 Rust 入核:Linux 工具链的重大变革
linux·开发语言·rust·linux kernel·kernel
SomeB1oody21 小时前
【RustyML入门】7.2. 深入模型持久化
开发语言·后端·机器学习·rust·教程
诺伦21 小时前
Rust 错误处理实战:从 unwrap 到优雅 Result 的进阶之路
开发语言·后端·rust
程序员爱钓鱼1 天前
Rust Associated Type关联类型详解:为Trait定义内部类型
前端·后端·rust
HumbleSwage1 天前
Rust 实现可以被 Python 调用的包
开发语言·rust
聪明蛋子哟1 天前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
python·golang·rust