- 0X1B 写剧本
- 现在我们的脚本还只能输出文字。我们本期来介绍如何让脚本读取终端的文字输入。当然检测程序有没有读到输入的最简单的办法就是让程序把接收到的文字复述一遍。
- 以下涉及io的函数,如果不能使用请先调用require('io')。
- io.read函数调用时不需要参数,它会返回一个字符串。这个字符串就是检测到的终端输入。如果终端一直没有输入那么这个函数就会一直等着,它后边的代码也不会执行。
- 一次终端输入的结束是以换行为结尾标志的。但是io.read读入的数据不会包括换行符(相应的print函数会在输出一个字符串之后加一个换行符)。
- 这个程序脚本在运行后会先输出一句话,提示输入。接收到输入后把输入的字符复述一遍。
require('io') print('Please input something:') s=io.read() print(s)
- 和io.read对应的有一个函数名为io.write。io.write的功能和print类似。但是它不会在字符串输出完毕后自动添加换行符。如果字符串中有换行符,它就会输出换行,如果没有就不输出。
- 注意io.write是有返回值的。其返回值为一个userdata类型的值。现在可以不用管它的这个返回值有什么意义明白它有返回值就可以。
- 在交互式编程环境下,使用io.write函数后,如果不用任何变量接受它的返回值,并且句尾也没有分号,就会发现在输出字符串内容后它还跟着输出了io.write返回值的的一些信息。对比如下代码在交互式运行环境中的运行结果:
io.write('hello\n'); d=io.write('hello\n') io.write('hello\n')
- 之前我们介绍过如何把Lua的交互式编程环境当做计算器使用。试想这样一个问题,我们需要求很多圆柱体的体积。每次都重新输入圆柱体体积计算公式显然太过繁琐。虽然可以在交互式编程环境中把它定义为一个函数,但是每次关闭交互式编程环境后其中的数据都会被删除。我们就可以写一个脚本,每次需要求圆柱体体积的时候,就运行脚本,从终端输入圆柱体的半径和高,然后程序返回它的体积。这将会在下一节中介绍。
- 还有一种方法可以简化9中提到的问题。就是把求圆柱体体积的函数定义写在脚本里。以后在交互式环境或者其他脚本中需要使用的时候就加载这个函数定义。这种脚本称为模块。这种方法将在以后介绍。
- 演示: 读写终端 https://www.bilibili.com/video/av15862593/
- 0X20 自定义计算器