-- 行注释
--[[ --]] 块注释
'\a' 响铃
'\b' 退格
'\f' 表单,换页
'\n' 换行
'\r' 回库,回车
'\t' 横向制表
'\v' 纵向制表
'\\' 反斜杠
'\"' 双引号
'\'' 单引号
~= 不等于
.. 字符拼接
#arr arr的长度
__add(a,b) a+b
__sub(a,b) a-b
__mul(a,b) a*b
__div(a,b) a/b
__mod(a,b) a%b
__pow(a,b) a^b
__unm(a) -a
__concat(a,b) a..b
__len(a) #a
__eq(a,b) a==b
__lt(a,b) a<b
__le(a,b) a<=b
__index(a,b) a.b
__newindex(a,b,c) a.b=c
__call(a,...) a(...)
布尔类型只有nil(零)和false是 false,数字0啊,‘'空字符串('\0′)都是true!
lua无括号,用do、end来替代括号的作用,
lua不使用++、+=这些算法操作
if-else:
if 条件 then
else
end
until循环
repeat
代码
until 条件
函数前需加function,最后用end结束
lua默认定义全局变量,局部变量需加local
可以在一条语句上赋多个值,也可以同时返回多个值(return)
数组可容纳不同类型的数据,可直接通过下标访问数据
lua下标不是从0开始,而是从1开始
require("name") 一个同样的lua文件,只有第一次的时候会执行,后面相同的不执行,忽略
dofile("name") 每次都执行,即使是同样的一个lua文件
loadfile() 载入暂不执行,等需要时操作执行。示例:
localhello= loadfile("hello")
...
...
hello()
读写用io.write和io.read,即io.write相当于cout,io.read相当于cin。
-e 直接将命令传入lua
-
l 加载一个文件
-i 进入交互模式
_PROMPT 内置变量,作为交互模式的提示符。用法:“_PROMPT ‘提示符’”
?? arg表:script之前为-1开始减,之后从1开始增,本身为0
lua的8个基本类型:nil、boolean、number、string、userdata、function、thread和table
.. 字符拼接,后面必须使用空格隔开,防止解释错
and和or的运算结果不是true和false,而是类似三目运算符,即第一个false,返回a(and)/b(or)
x=x or v 如果x为false或者nil则给x赋初始值v
(a and b) or c 对应C语言的三目运算符(a?b:c)
not的结果只返回false或者true
优先度:^ > not >= -(负号)> * >= / > + >= - > .. > 逻辑判断符 > and > or
除了^ 和..外所有的二元运算符都是左连接的,即当优先级相同时,从左往右的顺序执行
赋值时lua会先计算所有的值再执行赋值操作,所以x,y=y,x执行了x,y的相互交换
哑元(dummy variable,下划线) 忽略该位置的数据
函数参数列表中使用三点(…)表示函数有可变参数。
lua字符串转数组lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数
string.find(string1,string2) 再string1中查string2的位置(返回最后一个字符的位置)
unpack(arg) 返回arg表所有的可变参
数
文本格式化函数string.format(类似C语言的sprintf函数)
正确尾调用(proper tail recursion,尾递归):当函数最后一个动作是调用另外一个函数时,称为尾调用。尾调用不需要使用额外的栈(不需要保存调用者的任何信息)。(迷宫问题)
迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里。
<var-list>是以一个或多个逗号分隔的变量名列表,<exp-list>是以一个或多个逗号分隔的表达式列表,通常情况下exp-list只有一个值:迭代工厂的调用。
loadstring与loadfile相似,只不过它不是从文件里读入chunk,而是从一个串中读入。
loadstring函数功能强大,但使用时需多加小心。确认没有其它简单的解决问题的方法再使用。
loadfile和loadstring都不会抛出错误,如果发生错误他们将返回nil加上错误信息:
Lua中的函数定义是发生在运行时的赋值而不是发生在编译时。
调用loadstring返回的结果,然而如果加载的内容存在语法错误的话,loadstring返回nil和错误信息(attempt to call a nil value);为了返回更清楚的错误信息可以使用assert:
assert(loadstring(s))()loadstring编译的时候不关心词法范围
require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表。require
的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法。更明确地说,每一个模式是一个包含可选的问号的文件名。匹配的时候Lua会首先将问号用虚文件名替换,然后看是否有这样的文件存在。如果不存在继续用同样的方法用第二个模式匹配。
为了确定路径,Lua首先检查全局变量LUA_PATH是否为一个字符串,如果是则认为这个串就是路径;否则require检查环境变量LUA_PATH的值,如果两个都失败require使用固定的路径(典型的"?;?.lua")
require的另一个功能是避免重复加载同一个文件两次。Lua保留一张所有已经加载的文件的列表(使用table保存)。
当io.open打开失败时,
用assert将错误抛出。io.open返回的第二个结果(错误信息)会作为assert的第二个参数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论