文章插图
到目前为止,我们已经讲解了包括 变量、可变性、常量、数据类型、函数、if-else 语句和循环在内的一些关于 Rust 编程的基础知识 。
在 Rust 基础系列的最后一章里 , 让我们现在用 Rust 编写一个程序,使用这些主题,以便更好地理解它们在现实世界中的用途 。让我们来编写一个相对简单的程序,用来从水果市场订购水果 。
我们程序的基本结构来让我们首先向用户问好,并告诉他们如何与程序交互 。
fn main { println!("欢迎来到水果市?。?); println!("请选择要购买的水果 。n"); println!("n可以购买的水果:苹果、香蕉、橘子、芒果、葡萄"); println!("购买完成后,请输入“quit”或“q” 。n");}
获取用户输入上面的代码非常简单 。目前,你不知道接下来该做什么,因为你不知道用户接下来想做什么 。所以让我们添加一些代码,接受用户输入并将其存储在某个地方以便稍后解析,然后根据用户输入采取适当的操作 。
use std::io;fn main { println!("欢迎来到水果市?。?); println!("请选择要购买的水果 。n"); println!("n可以购买的水果:苹果、香蕉、橘子、芒果、葡萄"); println!("购买完成后,请输入“quit”或“q” 。n"); // 获取用户输入 let mut user_input = String::new; io::stdin .read_line(&mut user_input) .expect("无法读取用户输入 。");}
有三个新元素需要告诉你 。所以让我们对这些新元素进行浅层次的探索 。1. 理解 use 关键字在这个程序的第一行,你可能已经注意到我们“使用”(哈哈?。┝艘桓鼋凶?
use
的新关键字 。Rust 中的use
关键字类似于 C/C++ 中的#include
指令和 Python 中的import
关键字 。使用use
关键字 , 我们从 Rust 标准库std
中“导入”了io
(输入输出)模块 。LCTT 译注:“使用”在原文中为“use”,与新介绍的关键字一样 。你可能会想知道为什么我们在可以使用
println
宏来将某些内容输出到标准输出时 , 导入io
模块是必要的 。Rust 的标准库有一个叫做prelude
的模块,它会自动被包含 。该模块包含了 Rust 程序员可能需要使用的所有常用函数,比如println
宏 。(你可以在这里阅读更多关于std::prelude
模块的内容 。)Rust 标准库
std
中的io
模块是接受用户输入所必需的 。因此,我们在程序的第一行添加了一个use
语句 。2. 理解 Rust 中的 String 类型在第 11 行,我创建了一个新的可变变量
user_input
,正如它的名字所表示的那样,它将被用来存储用户输入 。但是在同一行 , 你可能已经注意到了一些“新的”东西(哈哈 , 又来了?。?。LCTT 译注:“新的”在原文中为“new”,在第 11 行的代码中,原作者使用了我没有使用双引号(String::new
函数,所以此处的梗与“使用”一样,原作者使用了一个在代码中用到的单词 。
""
)声明一个空字符串,而是使用String::new
函数来创建一个新的空字符串 。""
与String::new
的区别是你将在 Rust 系列的后续文章中学习到的 。现在 , 只需要知道,使用String::new
函数,你可以创建一个可变的,位于堆上的字符串 。如果我使用
""
创建了一个字符串,我将得到一个叫做“字符串切片”的东西 。字符串切片的内容也位于堆上,但是字符串本身是不可变的 。所以,即使变量本身是可变的,作为字符串存储的实际数据是不可变的,需要被覆盖而不是修改 。3. 接受用户输入在第 12 行,我调用了
std::io
的stdin
函数 。如果我在程序的开头没有导入std::io
模块,那么这一行将是std::io::stdin
而不是io::stdin
。sdtin
函数返回一个终端的输入句柄 。read_line
函数抓住这个输入句柄,然后,正如它的名字所暗示的那样,读取一行输入 。这个函数接受一个可变字符串的引用 。所以,我传入了user_input
变量 , 通过在它前面加上&mut
,使它成为一个可变引用 。??read_line
函数有一个
- 社区开展防汛排查防患于未然,社区开展防汛安全和危房排查
- 绍兴站属于哪个区,绍兴高铁站和火车站是不是同一个站?
- 微信登录方法有几种方式
- 中医绿豆汤的功效与作用
- 韭菜配什么菜好吃?
- 花呗怎么收钱怎么开通收款码
- 月份的英语单词和缩写
- 推荐5本高质量娱乐圈言情小说
- 奔驰车钥匙怎么换电池