lua 一种脚本语言,平均效率高,可以被c 、c++调用,也可以调用c或者c++程序;
lua与c或c++是通过一个栈来交换数据的,栈的默认大小是20(单位是什么不知道),栈的计数可以从栈顶开始,也可以从栈底开始。
从栈顶以-1开始 向下依次减小,从栈底以1 开始,向栈顶依次增大。可以通过
lua_gettop 函数获取栈里面元素的数目,实际上是获取下一个元素的index
下面介绍一些基础的语法:
变量不需要声明,直接赋值使用即可;
变量8个基本类型:
nil:这种类型的数据只有一个值 nil,删除一个变量 将该变量赋值为nil即可。
boolean 只有两个取值 true和false 不过,值得注意的是 任何值都可以作为条件,但只有false 和nil为假,其他都为真。0亦为真
number 浮点型
string 字符串,值得注意的是 lua中的字符串变量是不可以修改的 lua可以包含很长的字符串,甚至是一本书也可以放在一个string变量里
lua会自动将string和number之间进行转换,转换为期望的数值,eg:print("10+1") 输出:10+1 a="10"+1 print(a) 输出11
function 在lua里,函数也是一种数据类型,并且可以存储在一个变量中,作为变量使用 例如:作为函数的参数。或者是函数的返回值
userdata
threads
table
操作运算符:== ~=
userdata threads table 对于这三种数据,是通过引用比较的,当且仅当是同一个对象时,判定相等。否则判定不等。
两个变量数据类型不同,则判定为不等。另外对应于这三种数据,赋值操作实际上并没有创建新的对象,只是相当于一个引用 eg:
a={}
a.x=1 a.y=1
c=a
此时 c==a成立
特别需要注意的是and or运算符:
这两个运算符的返回值不是 true 和 false 而是连接的操作数 eg:
a and b 如果a为false 返回a,否则 返回b
a or b 如果a为true 返回a 否则 返回b
C语言中的 a?b:c 等价于 (a and b) or c
下面介绍非常强大的数据类型 table:
初始化:
days={"monday", "tuesday","sunday"}
可以通过days[1] 访问monday 注意索引 从1开始
也可以按照如下方式初始化:
a={x=1,y=2} 等价于 a={}; a.x=1; a.y=2;
上面介绍的都是全局变量,下面介绍局部变量:
主要需要注意的是局部变量的作用范围,一般只在chunk中 或者是 do end(相当于C语言中的{})中;
建议使用局部变量,优点有二:1、访问速度快 2、避免变量命名冲突
使用do end是很好的控制局部变量作用范围的一种方式
下面说控制结构:
repeate
……
until condition --注意,当condition为false时,继续执行,true时 停止执行
for 循环
for i=start,end do
loop_part
edn
start 是起始值,end是终止值 值得注意的是 i是局部变量,出循环后就失效了