阅读《Lua程序设计(第4版)》---1-0
1.程序段
Lua语言执行的每一段代码(例如,一个文件或交互模式下的一行),即一组命令或表达式组成的序列;
Lua语言的解释器可以的支持非常大的程序段;
2.交互模式
不带有任何参数时运行Lua解释器,当输入的命令首字符EOF控制字符时推出交互式模式(WIN环境下使用Ctrl+Z ; POSIX环境下使用Ctrl+D)
os.exit()函数也可用于退出交互模式
交互模式下输入表达式会直接输出表达式的值,赋值语句不会立即返回结果,必须再调用变量名(老版本中表达式想要输出表达式的值,需要在最前面加‘=’号)
3.标识符(大小写敏感)
由任意字母、数字、下划线组成的字符串(不能以数字开头).
下划线+大写字符(如:_VERSION)常被Lua语言用于特殊用途,尽量避免使用该组合;
Lua语言保留字不能用标识符;
通常 下划线+小写字母 用作哑变量(虚拟变量);
3.保留字(22个)
and break do else elseif end false for function goto if in local nil not or repeat return then true until while
Lua语言是对大小写敏感:And、AND是两个不同的标识符;
4.注释
两种:单行注释(使用两个连字符开始--)和多行注释(使用连续的两个连字符和连续的左方括号开始,连续的两个右方括号结束,方括号之间的内容都是注释)
注:Lua语言中的长字符串(连续两个左方括号开始,连续两个右方括号结束),使用多行注释时,很容易产生混乱。Lua语言给出的对策是连续两个方括号加入N个等号,N可以是任意自然数,只有加入相同数量的等号的左右括号才能相互匹配!
例如:
注释代码:--[[ ]] 、--[[ --]] 、--[==[ ]==]、--[==[ --]==]
重新启动注释代码: ---[[ ]] 、---[[ --]] 、---[==[ ]==]、---[==[ --]==]
5.分隔符
当一行有多条语句时,可以用;将各句分开;
Lua中的分隔符并不是必须的,回车和空格可以分隔两个语句;
交互模式下,语句后加分号,不立即显示表达式的值
6.dofile函数
指定文件内容作为Lua的程序块执行,默认参数stdin;
执行后返回程序块的所有返回值;
注:
传递的文件名参数,该文件名需要扩展名(文件名不区别大小写)
如果调用的文件没有返回值,则该函数返回nil
7.全局变量
无须声明即可使用;
使用未经初始化的全局变量不会出错,该值为nil;
Lua语言是动态类型语言,即没有类型定义,每个值都带有其自身的类型信息;
基础类型:nil(空)、boolean(布尔)、number(数值)、string(字符串)、userdata(用户数据)、function(函数)、thread(线程)、table(表);
使用系统的type函数可以获取每个值对应的类型名称(string);
1.nil类型的值只有nil,表示为无效值;
当把ni赋值给全局变量,Lua会回收该全局变量(占用的内存)
2.boolean类型的值有两个,分别关键字true/false ;
Lua中条件判断表示错误时,该值为false和nil,其他都是正确的;
3.number类型是数值类型,分别是整型integer(64位/32位)、浮点类型float(双精度/单精度)
4.string类型是字符串类型,Lua标准库中提供了很多处理字符串的函数
5.userdata类型是用户数据类型,它用来表示由应用或C语言编写的库所创建的新类型。如标准I/O库采用C语言标准输入输出,io.stdin就是一个C语言标准库创建的FILE指针类型。
6.function类型是函数类型,函数可以像一个其他类型值一样在变量之间传递
7.thread类型是线程类型,为Lua的并行运算提供有力支持
8.table类型是表类型,Lua语言中最主要(事实上也是唯一的)和强大的的数据结构
8.逻辑运算符
常见的逻辑运算符:and、or、no;
条件判断都以false和nil为错误,其他都是正确的;
not运算符:判断not后跟随的表达式的值正确与否,返回一个取反的boolean类型值
and运算符:A and B,先计算表达式A的值,如果A的判断是true,计算表达式B的值并返回;如果A的判断是false,立即返回表达A的值,并不再计算表达式B的值(短路求值原则)
or运算符:A or B,先计算表达式A的值,如果A的判断为true,立即返回表达式A的值;如果A的判断是false,计算表达式B的值并返回(短路求值原则)
注:
Lua语言中的and 和 or 的运算符的返回值并不一定是boolean类型;
如:A and B or C 等价于 C语言中的三目运算符: A ? B : C(运算符and 运算比or运算的优先级更高)
9.作为独立语言Lua解释器:
Lua是嵌入式语言,常作为扩展嵌入在C/C++等程序中,Lua当前是一个独立语言.
在Lua官网下载源码后编译lua.c文件可生成可执行lua,这就是作为独立语言时Lua解释器(或者通过MAKEFILE生成).
独立的Lua解释器包含所有标准库、包括调试库.
独立解释器的参数:
1.-e参数允许直接在命令行中输入代码
2.-l参数用于加载库,效果与dofile函数类同,库文件名也是不区分大小写的
如:需要加载库文件为Test.lua,参数里写-lTest 或者 -l Test,库文件运行的返回值存储在全局变量[库文件名]中,如Test中,当库文件没有返回值,变量赋值为true(并不是nil)
3.-i 运行脚本后进入交互模式及,方便于调试
4.-v打印版本信息
5.-E忽略环境变量LUA_INIT_5_3/LUA_INIT和LUA_PATH和LUA_CPATH的值;
如不忽略则解释会运行LUA_INIT_5_3中的Lua代码,变量不存在则查找LUA_INIT,都不存在则运行文件名参数;
环境变量以@开头则认为环境中的是一个文件地址
arg变量:获取向解释器传入的参数,这个预设(运行代码前会创建一个名为arg的表)的全局变量的类型是表,其中存储了所有的命令行参数。
arg[0]存储的是执行的文件地址或-e参数对应的指令;
arg[-1],arg[-2]等存储之前的调用内容,如lua -e 之类的;
arg[1]、arg[2]存储的是除-e、-e对应的语句、文件名以外的变量,按传入顺序存储;
注:也可以用可变长参数...来得到arg[1]、arg[2].....等传入参数