Lua脚本式编程
1.基本语法
单行注释:–
多行注释:–[[ 内容–]]
lua最好不要使用下划线加大字母的标识符,因为lua的保留字是这样的。
lua不允许使用特殊字符如@$%来定义标志符。
默认情况下,变量总是认为全局。
删除全局变量,只需要将变量赋值nil .
lua的数据类型:nil 、boolean、number、string、userdata、function、thread和table。
nil作为比较时应该加上双引号,例如
1 |
|
boolean类型只有两个可选值:true 和 false
lua把false和nil看作是“假”,其他都为真。
number(数字):lua只有一种number类型,double双精度类型,默认类型可以修改luaconf.h里面的定义。
string(字符串):由一对双引号或单引号来表示,也可以用2个方括号“[[ ]]”来表示“一块”字符串。
对一个数字字符串上进行算术操作时,lua会尝试将这个数字字符串转换成一个数字。
1 | print(“2”+6) 8.0 |
字符串连接使用的是 . .如:
1 | print("a" .. "b") ab |
#计算字符串的长度。
1 | len ="www.runoob.com" |
2.宿主语言C/C++
==虚拟栈==
无论何时lua调用C,被调用的函数都得到一个新的栈,这个栈独立于C函数本身的栈,也独立于之前的栈。
方便起见,所有正对栈的API查询操作都不严格遵守栈的操作规则。而是可以用一个索引来指向栈上的任何元素:
==正的索引指的是栈上的绝对位置(从1开始),负的索引指从栈顶开始的偏移量。==
Lua_checkstack:扩大可用堆栈的尺寸
LUA_MINSTACK一般被定义为20。
压入栈的数据类型包括数值、字符串、指针、table、闭包。
Lua_pushcclosure(L,func,0);创建并压入一个闭包
Lua_createtable(L,0,0);新建并压入一个表
Lua_pushnumber(L,343);压入一个数字
Lua_pushstring(L,”Nystr”);压入一个字符串
Lua中,number、boolean、nil、lightuserdata四种类型的值是直接存在栈上元素里和垃圾回收无关。
Lua中,string、table、closure、userdata、thread存在栈上元素里的只是指针,他们都会在生命周期结束后被垃圾回收。
Lua_push族函数都有“创建一个类型的值并压入”的语义。
Lua value -> C value时,是通过Lua_to族api实现的。
1 | 取表中元素 |