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 多次猜测

相关推荐
怪我冷i4 小时前
Rust 的impl语法详解
开发语言·后端·rust
geovindu8 小时前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
Thneonl9 小时前
Claude Code 频繁 Compacting?发布次日我根治了 2 个痛点
后端·rust
怪我冷i1 天前
Rust 智能指针 RefCell<T> 与内部可变性模式
rust
2601_967980111 天前
Python 初学者必备的常用内置函数
python·编程语言·内置函数·初学者·常用函数
YOLOW921 天前
两周五个版本:我用 Rust 写的 AI 数据引擎 PageSift,0.81 系列做了什么
rust
西风测评1 天前
SSH 中文乱码的根源:locale、SendEnv 与 env 请求
rust
unconditional1 天前
我数了下 sdkm 的源码:41 个工具的安装逻辑,四分之三是同一行
rust·开源
niyongsheng2 天前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
Hello.Reader2 天前
tsrs 技术解析用 Rust 移植 TypeScript 7,类型检查还能怎样提速?
开发语言·rust·typescript