Rust游戏开发实战
上QQ阅读APP看书,第一时间看更新

2.2.4 读取用户输入

现在,你可以访问stdin,同时还有一个可以用来存储访客姓名的变量,这样就为从控制台输入读取访客的名字做好了准备。接下来要做的是将下列代码添加到main函数中变量声明语句下方的位置:

FirstStepsWithRust/hello_yourname/src/main.rs

stdin()
.read_line(&mut your_name)
.expect("Failed to read line");

这种组合使用函数的方式称为函数的链式调用(function chaining)。从最上面开始,每个函数都把自己的计算结果传递给下一个函数。对于这种链式调用而言,通常会把每一个步骤写在单独的一行上,并通过缩进来表示这些行代码属于一个整体。cargo fmt命令(见1.6节)会为开发者自动应用这样的格式。

为什么要先创建一个变量?

 read_line()函数希望把它的执行结果写入一个已经存在的字符串,而不是返回一个新的字符串。因此,你需要先创建一个空的字符串变量,这样才有位置来存储函数执行的结果。

关于read_line函数调用的解释如图2-2所示。

图2-2

你可以从这段代码中学到两个重要的概念。

(1)在变量名前面写一个与符号(&),即能创建一个此变量的引用(reference)。引用可以传递对变量自身的访问权限,而不是把变量复制一份。你也可以将其称为借用(borrowing)——把变量借给(lending)当前正在准备调用的函数去使用。当使用&mut形式借出时,借用该变量的函数就能对这个变量进行修改。对借用变量的修改都会直接作用到被借出的变量上。若将&mut your_name传递给read_line函数,则会使得read_line函数可以直接写入your_name变量。

(2)开发者期待read_line函数能够正常工作。如果不符合预期,那么这个程序就会崩溃。这个Rust函数会返回一个Result类型的对象,你可以通过调用Result类型的expect方法来检查函数是否正常工作。现在还不必急于了解这方面的细节,你将在3.1.4节中了解到与错误处理相关的内容。