继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Rust猜猜猜:我的学习之旅

SMILET
关注TA
已关注
手记 455
粉丝 80
获赞 441

2025年1月6日更新:我在文章末尾加了 GitHub 链接。我会继续边玩边从这个程序里学习。

如果你关注过我的文章,你会发现我写了许多针对初学者的 Rust 编程语言的内容。这是我尝试用文字和想法表达自己对当前话题的理解,以便日后参考。这些内容可能不总是非常完整或提供最佳视角,但它可以补充我在其他地方学习的内容。

他们说说到底,理解某件事情最好的方式就是试着向别人解释它。我两年前写下的所有内容,到现在为止都已经在这里发布了。我把它搬到了一个可能触及更多人的平台上。说实话,到了2022年,免费互联网已经死了……到了2025年,情况更加糟糕。如果你不在某个精选的内容平台上,你基本上就等于隐形了。

在这方面,我正在加倍关注基础知识。我大约两年前开始读《The Rust Book》(https://doc.rust-lang.org/book/title-page.html),却从未读完。我发现它有点......晦涩难懂。书中缺乏贴近生活的具体示例,因此我很难从中学习。我这种学习者需要动手来做。对我来说,抽象概念的意义不大,除非我主动尝试去实现一些实际的东西。

不幸的是,这种倾向让我忽视基础部分,因为它们本身并不吸引我(可以理解吗?)。我总是急于求成,还没有学会走就开始跑,寻找某个东西或某个项目,通常远远超出了我的能力范围。随着时间的推移,通过不断重复,这些知识才逐渐被我掌握。

我觉得这有点像学习障碍,我知道对自己太苛刻了。我最大的愿望是能学会放慢脚步,享受理解基础知识的乐趣。

我还是不会有什么太大的改变。最好还是顺其自然,别硬抗。

总之,别再自言自语了。我之前说过了,我是在2025年回到了《The Rust Book》。昨天我完成了第二章,即作者指导你创建猜数字游戏的那一章。

今天我决定从记忆中完成,挑战自己。

基本上搞定,但有点磕磕绊绊。这里就是那个超级复杂设计的版本:

// src/main.rs

// 来自《The Rust Book》第二章的猜数字游戏项目

// 依赖包
use color_eyre::Result;
use rand::{thread_rng, Rng};
use std::cmp::Ordering;
use std::io::{stdin, stdout, Write};

// 输出消息函数
fn write_msg(msg: &str) -> Result<()> {
    stdout().write_all(msg.as_bytes())?;
    Ok(())
}

// 主函数:程序的入口点
fn main() -> Result<()> {
    // 设置 color_eyre
    color_eyre::install()?;

    // 生成一个用户需要猜测的随机数(范围1到100)
    let mut rng = thread_rng();
    let number = rng.gen_range(1..=100);

    // 游戏循环
    loop {
        // 用户输入
        let msg = "请在1到100之间输入一个数字...\n";
        write_msg(msg)?;
        let mut guess = String::new();
        stdin().read_line(&mut guess)?;
        let msg = format!("你的猜测是: {}", guess);
        write_msg(msg.as_str())?;

        // 比较用户输入与随机数
        let guess: i32 = guess.trim().parse()?;

        match guess.cmp(&number) {
            Ordering::Less => {
                let msg = "太小了!\n";
                write_msg(msg)?;
            }
            Ordering::Greater => {
                let msg = "太大了!\n";
                write_msg(msg)?;
            }
            Ordering::Equal => {
                let msg = "你猜对了!恭喜你获胜!\n";
                write_msg(msg)?;
                break;
            }
        }
    }

    Ok(())
}

进入全屏 退出全屏

下面几点超出第二章介绍的内容:

  • 使用 color_eyre 这个 crate 来进行错误处理。这个 crate 允许使用 ? 操作符,简化了错误处理,并减少了你需要编写的样板代码。
  • 没有使用宏……出于某些原因,我决定不使用宏,因为我希望理解底层原理。你会看到一个 write_msg() 函数,它接受一个字符串切片,并调用 stdout() 函数来创建一个 stdout 的句柄,从而获得一个实现了 Write 特性的对象,这样我们就可以向控制台输出消息了。

除此之外,和第二章差不多。我曾想过把它做成某种API,但最终还是沿用了书里的方向。

这是一个非常基础的程序,但它强调了许多重要的 Rust 概念,并且是一个很好的开始。我在这里分享是因为想展示我的工作,也许能得到一些建设性的反馈,并且也许能帮助其他人踏上 Rust 的旅程。

晚安啦,感谢您的阅读!

GitHub 项目主页

参考资料

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP