Lua脚本式编程

1.基本语法

单行注释:–
多行注释:–[[ 内容–]]

lua最好 不要使用 下划线加大字母的标识符,因为lua的保留字是这样的。
lua不允许使用特殊字符如@$%来定义标志符。

默认情况下,变量总是认为全局。
删除全局变量,只需要将变量赋值nil .

lua的数据类型:nil 、boolean、number、string、userdata、function、thread和table。

nil作为比较时应该加上双引号,例如

1  
2  
type(x) == "nil"  

—|—

boolean类型只有两个可选值:true 和 false
lua把false和nil看作是“假”,其他都为真。

number(数字):lua只有一种number类型,double双精度类型,默认类型可以修改luaconf.h里面的定义。

string(字符串):由一对双引号或单引号来表示,也可以用2个方括号“[[ ]]”来表示“一块”字符串。

对一个数字字符串上进行算术操作时,lua会尝试将这个数字字符串转换成一个数字。

1  
2  
print(“2”+6)   8.0  
print("2"+"6") 8.0  

—|—

字符串连接使用的是 . .如:

1  
2  
print("a" .. "b")  ab  
print(157 .. 428) 157428  

—|—

#计算字符串的长度。

1  
2  
3  
len ="www.runoob.com"  
print(#len)	                 14  
print(#"www.runoob.com") 14  

—|—

2.宿主语言C/C++

==虚拟栈==
无论何时lua调用C,被调用的函数都得到一个新的栈,这个栈独立于C函数本身的栈,也独立于之前的栈。
方便起见,所有正对栈的API查询操作都不严格遵守栈的操作规则。而是可以用一个索引来指向栈上的任何元素:
==正的索引指的是栈上的绝对位置(从1开始),负的索引指从栈顶开始的偏移量。==

Lua_checkstack:扩大可用堆栈的尺寸
LUA_MINSTACK一般被定义为20。

压入栈的数据类型包括数值、字符串、指针、table、闭包。

Diagram

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  
2  
3  
4  
5  
6  
取表中元素   
void lua_getfield(lua_state *L,int index,const char *K)  
操作: arr = stack[index]  
			stack.push(arr[K])  
			取表中键为K的元素,这里的表是由index指向的栈上的一个表。  
			栈高度+1,栈顶元素是(stack[index])[K]。  

—|—

糖果

糖果
LUA教程

如果不小心安装错 SQL Server 为 Evaluation 的版本,要小心当超过 180 天之后,系统就会无法正常使用了 这几天遇到一个蛮特别的案例,原本收到的问题是 “维护计划” 忽然无法使用,即便是里面没有任何的Task,都无法顺利地执行。但从对方所提供的错误消...… Continue reading

PLUM NIZ静电容键盘怎么样?

Published on September 25, 2020

程序员如何选择合适的机械键盘

Published on September 18, 2020