一直在说要写个lua系列,已经开始了第一篇,这是第二篇。其实,对程序来说,什么最重要呢?当然是数据了,逻辑不过是对数据的处理,放到合适的位置。聊数据的话,从哪说起,先从数据类型吧!
lua中有8个基本类型:nil, boolean, number, string, userdata, function, thread 和 table。
lua数据类型.jpg
nil(空)
nil 类型没有任何有效值
boolean(布尔)
boolean 有2个值,true和false,在lua 中,nil, 0, false 都可以理解成false;其他为true;和其他语言不一样,其他语言0, false是false 的意思。
number(数字)
在lua里,只有一种数据类型number,不管是int ,long ,long long 等等,可以参考luaconf.h ,如下图所示:
lua数据类型number1.jpg
上图是有关一些精度的定义
lua数据类型number2.jpg上图是所有和number数据类型有关的代码,感兴趣,可以参考这个相关代码。
string (字符串)
在lua中字符串用单引号或者双引号来包括。
关于字符串的所有操作,可以在lstrlib.c 中找到,大概有以下操作:
lua数据类型string.jpg
这个是lua库里相关的,如果有需要做扩展的,可以在此扩展自己的方法。
table (表)
在lua里,table是一个很重要的数据结构了,几乎所有的操作都是可以理解成对表的操作。当然,对表的操作,有以下几种,如下图所示:
lua数据类型table.jpg
这些操作在ltablib.c中,行号已经给出。可以参考。
function(函数)
函数,在lua里被看作是“第一类值”,另外,需要注意匿名函数和闭包函数。
匿名函数
testFunc(tab,
function(key,val)--匿名函数
return key.."="..val;
end
);
闭包函数
function test(n)
local function test1() //闭包1
print(n)
end
local function test2() //闭包2
n = n + 10
end
return test1, test2
end
thread(线程)
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
协程的主要操作如下图:
lua数据类型coroutine.jpguserdata(自定义类型)
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
网友评论