0X1B写剧本

前置知识

  • 0X1A转义字符

正文

  1. 现在考虑这样一个问题:你需要在终端显示一段剧本对话。通过直接在Lua的交互式编程环境中手动调用可以实现这个功能,但是存在两个问题:
    • 每次需要输出,都要手动重复输入。
    • 在交互式编程环境中无法隐藏命令提示符和输入的命令。
  2. 为了解决这个问题,我们介绍有关脚本的内容。所谓的脚本就是剧本的意思。我们用Lua语言为计算机写好剧本,然后计算机按照上边的指示调用各种函数和功能,完成我们想要的功能。
  3. Lua语言的脚本就是一个纯文本文件(Plain Text)。所谓的纯文本就是说不带有任何文本格式(字体,大小,颜色,图文排版等)信息。更直观的理解就是Windows记事本或者vi直接保存的那种文件。
  4. 在纯文本文件中直接输入Lua语句,然后保存。可以没有后缀名,但是推荐用“.lua”作为后缀名。例如文件名为:myFile.lua。文件内容为: >>print("You are ruthless. You are cruel. You are unreasonable.") >print("Aren't you heartless! ? Aren't you cruel! ? Aren't you unreasonable! ?") >print("I'm not ruthless. I'm not cruel. I'm not unreasonable.") >
  5. 在命令行输入lua,然后接要执行的脚本文件名(或者文件路径)就能让Lua解释器解释执行脚本。
  6. 在交互式编程环境中需要按Enter键的地方,在编写脚本的时候一般也需要按Enter键。一般来说一个语句会占一行的空间。函数定义、流程控制等复杂语句视情况可以写成多行。
  7. 在脚本中书写多行语句的时候,建议使用缩进来体现代码间的层次关系——虽然对于Lua来说,缩进不是必须的。例如: >>function fun1(x): > x=x*x > y=x+1 > return y >end >
    • 中间的三句是函数fun1的循环体,因此比开头的function要缩进四格。
    • 其实这个缩进量比较随意,你可以一层缩进用四个空格,也可以用一个Tab,或者随便几个空格。只要能说明问题,并且同一就行。
    • 表示语句结束的end和表示函数定义开始的function对齐。
  8. 如果一个复杂语句内部还嵌套了一个复杂语句,那么内部复杂句中的代码块要在缩进了一次的基础上再缩进一次。一般有几层嵌套就有几层缩进。例如: >>function fun2(x): > function fun3(y): > return y*y > end > return fun3(x)+1 >end > fun3的定义本身在fun2的定义内部,所以进行了一次缩进。return y*y又在fun3的定义内部,所以在fun3开头function的基础上又缩进了一次。
  9. 一般来说建议一行的字符数(按ASCII字符宽度计算)不超过80个。(这个数字来自于古老的终端可显示字符列数。)如果太长的话可读性会下降。
    • 但是我们很难把每一行的内容都恰好规划到80个字符以内。
    • 因此我们可以把特别长的行拆成几行来写。
    • 被拆开的几行,第一行保持原有的缩进,后几行一般在第一行的基础上缩进一层,以方便读写。例如一个参数比较多的函数调用: >>print(123, > 'hello world and this is my...', > 'there is another ...', > 2722.3272, > 2234) >
    • 可以拆开写的内容一般是包括在一对括号内(由逗号隔开各项)或者在一个函数定义、流程控制之类的复杂语句内部。
  10. 脚本中的命令将会从上到下顺序执行。如果有错误导致程序终止,则终止时所在点后边的脚本内容就不会被执行。
  11. 如果你希望在脚本的编写阶段就排除掉语法错误和一些可能导致程序崩溃的错误。你可以给你的文本编辑器添加相关的Lua差错和调试插件,或者使用合适的IDE。本着KISS原则,我不在这里进行具体的推荐。后续的脚本编写,都将使用最简单的记事本、vi或者emacs进行。
  12. 演示: 脚本运行 <>!!!!!!!!!!!!!!

后续推荐

  • 0X1F读写终端