rust 程序,rust编程开发教程


rust 程序,rust编程开发教程

文章插图
到目前为止,我们已经讲解了包括 变量、可变性、常量、数据类型、函数、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::iostdin函数 。如果我在程序的开头没有导入std::io模块,那么这一行将是std::io::stdin而不是io::stdin
sdtin函数返回一个终端的输入句柄 。read_line函数抓住这个输入句柄,然后,正如它的名字所暗示的那样,读取一行输入 。这个函数接受一个可变字符串的引用 。所以,我传入了user_input变量 , 通过在它前面加上&mut,使它成为一个可变引用 。
?? read_line函数有一个