阅读《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].....等传入参数

 

posted @ 2021-07-19 14:46  微臣做不到  阅读(175)  评论(0编辑  收藏  举报