一起长锈:3 类型安全的Rust宏(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码

  • 故事梗概:
  • 在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;
  • 然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而不至被裁员,她必须领会编程如何"快速"才能有真正的意义。

上次聊到,Java程序员赵可菲和C++程序员席双嘉在Rust大神贾克强的带领下,找到了AI编程小助手艾极思把Rust编程书中的游戏需求改成了“猜骰子冷热”,现在得重新写一遍代码了。

他们用 cargo new 命令开了个新的Rust项目,并且把Cargo.lock文件也上传到版本库去了。

下一步,就是要开始为“猜骰子冷热”游戏写代码了。

3.1 列出“猜骰子冷热”游戏的用户故事

赵可菲:“在这个AI写代码的时代,最快的写代码方式就是告诉艾极思你的需求,然后让它帮你写。”

席双嘉:“这主意不错哦!但是我们才刚开始学Rust,艾极思如果直接给我们一大堆最后的代码,我们可能会一头雾水。”

“要不我们按照书上的方法,把游戏的需求分成一些小的用户故事。一点一点来学习。”

赵可菲点点头。

他们两个列出了“猜骰子冷热”游戏的7个用户故事,改编自Guessing Game的故事:

1 获取玩家猜的两个骰子点数之和并显示给玩家 2 生成两个骰子点数之和的随机答案 3 比较答案与玩家猜的点数之和 4 将玩家猜的点数之和字符串转换为数字以便比较 5 允许玩家在没猜对后继续猜 6 玩家在猜对后程序退出 7 玩家的输入若不是数字,则继续猜

赵可菲照着书上的代码,写出了故事1“获取玩家猜的两个骰子点数之和并显示给玩家”的代码:

use std::io;

fn main() {
    println!("Guess the sum of two dice!");

    println!("Please input your guess (between 2 and 12).");

    let mut guess = String::new();

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

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

3.2 自动加载标准库的prelude

贾克强:“我来考考你们。这段代码里,哪些是用了prelude的标准库?哪些又得自己use标准库呢?”

席双嘉:“书上说,io::stdin()不在prelude里,得用use std::io自己来use。”

“但是,哪些用了prelude的标准库,我就不知道了。”

赵可菲一边翻书一边说:“prelude是啥来着?”

贾克强:“Rust的标准库功能多得很。但是,如果每个功能都得手动use,那就太麻烦了。同样,use一堆你根本不用的功能也不妥。所以,要找个平衡。”

prelude就是Rust自动use到每个Rust程序的功能清单。它尽量保持简洁,主要关注那

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/598221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】动态分配内存

内存的五大分区 1、堆区(heap)——由程序员分配和释放, 若程序员不释放,程序结束时一般由操作系统回收。注意它与数据结构中的堆是两回事 2、栈区(stack)——由编译器自动分配释放 ,存放函数的…

力扣刷题:四数相加Ⅱ

题目详情: 解法一:暴力枚举 对于这道题,我们的第一思路就是暴力枚举,我们可以写一个四层的for循环进行暴力匹配,只要相加的结果等于0就进行统计。但是我们会发现,我们的事件复杂度为O(N^4)事件复杂度非常大…

vue使用pdfjs-dist在电脑上展示PDF文件

安装 安装的时候一定要带上版本号,这里采用的是2.0.943(因为这个版本对于我目前的项目比较合适可以正常使用,其他版本大概率会报错),当前项目使用的是vue2,vue的版本是2.5.10 npm install pdfjs-dist@2.0.943 查看版本发现这玩意版本非常之多 使用 在使用pdfjs-dist库…

张大哥笔记:自媒体人10种赚钱方法

很多人都在做自媒体,比如平台广告分成、广告收入、公关宣传、品牌植入、演讲、会员制、出书、线下活动。那么本文介绍了自媒体人10种赚钱方法,供大家参考: 1、打造个人IP 什么是个人IP?在百度百科上是这样解释的:指个…

深度学习之基于YOLOv5目标检测可视化系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着深度学习技术的快速发展,目标检测在多个领域中的应用日益广泛,包括…

字节人都用的婚恋交友相亲平台有哪些?聊聊互联网大厂的人是怎么脱单的!

虽然在字节这样的公司上班,也算是人中之人了。但是也耐不住29岁了,快成大龄剩女了。迫于长辈的催婚压力,所以带着任务体验了一遍各大相亲交友平台,以下是我的使用感受。 1、青藤之恋:偏相亲定位,曾经高学历…

libcity 笔记:libcity/executor/traj_loc_pred_executor.py

1 构造函数 2 _build_optimizer 根据配置中指定的优化器类型创建并返回一个适合用于模型训练的优化器对象 3 _build_scheduler 构建一个学习率调度器(scheduler) 4 train 5 run 6 _valid_epoch 7 load_model & save_model 保存/加载模型的状态字…

一起长锈:4 默认不可变的变量绑定与引用(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…

Oceanbase all-in-one单机版部署,通过MySQL客户端连接OB租户,DBEAVER 客户端连接MySQL租户。

一.Oceanbase all-in-one单机版部署 1.修改资源限制。 vim /etc/security/limits.conf root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350 * soft stack unlimited * hard stack unlimited * soft nproc 655360 * hard nproc 6553…

【ElasticSearch】IK分词器中停用词问题

问题描述 在ES中进行部分关键词搜索时,搜索无结果,如搜索 【IT】 环境描述 中文分词插件 这里使用的是 analysis-ik 分词调试 POST test_index/_analyze {"text":"IT Manager","analyzer": "ik_max_word"…

ChatGPT4 Turbo 如何升级体验?官网如何使用最新版GPT-4 Turbo?

本文会教大家如何教大家升级自己的GPT4到GPT4 Turbo,同时检验自己的GPT4 Turbo是否是最新版本的GPT-4-Turbo-2024-04-09 说明 新版GPT-4 Turbo再次重夺大模型排行榜王座,超越了Claude 3 Opus。 最新版本的GPT-4 Turbo被命名为GPT-4-Turbo-2024-04-09。…

thinkadmin table列表页点击直接修改用户金额(其他内容都可以)

需要修改用户余额时 点击余额区域 可以手动输入金额 输入后调用api接口自动刷新 html代码 // 初始化表格组件$(#NewsTable).layTable({even: true, height: full,sort: {field: id, type: desc},where: {type: {$type|default="index"}},cols: [[{checkbox: true,…

pip install 过程中报错:Microsoft Visual C++ 14.0 is required.

这是因为电脑中缺少这个组件导致的,我们将这个组件安装上即可解决问题。 安装报错关键信息:Microsoft Visual C++ 14.0 is required. 目录 一、下载组件 二、 安装步骤 一、下载组件 阿里网盘:VisualStudioSetup.exe:

Python生成文学编程风格文档库之pycco使用详解

概要 Pycco是一个Python库,用于生成文学编程风格的文档。它受到了Docco(一个快速生成源代码文档的工具)的启发,并通过解析源代码旁边的注释来创建一个美观的文档页面,使代码的解释与代码本身并排显示。 安装 安装Pycco非常简单,可以通过Python的包管理器pip进行安装: …

栈和队列的定义和实现

栈和队列 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 **称为栈顶,另一端称为栈底。**栈中的数据元素遵守后进先出LIFO(Last In First Out&#…

如何应对Android面试官 -> PKMS 权限管理

前言 本章我们继续上一章节,讲解 PKMS 相关知识点; 静默安装 静默安装说的就是:在用户无感知的情况下,给用户的手机安装了某个 app,或者是用户触发安装之后,不需要额外的任何操作即可以安装目标 app 到手机…

【JavaWeb】网上蛋糕项目商城-注册,登录,修改用户信息,提交订单

概念 通过以上多篇文章的讲解,对该项目的功能已经实现了很多,本文将对该项目的用户注册,登录,修改用户信息,以及用户添加至购物车的商品进行提交订单等功能的实现。 注册功能实现 点击head.jsp头部页面的注册按钮&a…

最新贷款市场报价利率(LPR)数据(1991-2024)

数据来源:东方财富网时间跨度:1991-2024年 数据范围:全国范围 数据指标: LPR_1Y利率(%) LPR_5Y利率(%) 中长期贷款利率:5年以上(%) 短期贷款利率:6个月至1年(含)(%) 日期 样例数据: 下载链接: ht…

win10 截图黑屏解决方法

win10 使用QQ截图等第三方工具截图黑屏,提示 Capturing screen is forbidden! 此时winshiftS截图也无法正常工作,解决方法如下: 参考地址:Redirecting

AHB---数据总线

1. 数据总线 为了实现AHB系统,需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位,但这可以根据数据总线宽度进行更改。 数据总线包含以下部分: HWDATAHRDATAEndianness(字节序) 1.1 HWDATA 在写传输…