Lua的8中数据类型
- nil 表示无效值(条件表达式中为false)
- boolean 布尔值(true/false)
- number 数值型(十进制/十六进制/科学计数法/等)
- string 字符串(”” / ‘’)
- function 函数
- userdata 自定义类型(脚本用户只能使用,不能对其定义)
- thread 线程类型
- table 表(可以通过表来创建数组、字典等复杂数据结构)
nil
只有值nil属于该类,在条件表达式中相当于 false
没有赋值的变量默认为nil值
nil在关系运算符中比较时,要注意nil 和 “nil”区别;type(xx) 返回的是类型的string形式print(x); -- nil
print(x == nil); -- true
print(type(x)); -- "nil"
print(type(X) == nil); -- false
print(type(X) == "nil");-- true
boolean
Lua将false、nil看作假;true和非nil为真
if false or nil then
print("false、nil至少一个为真");
else
print("false 和 nil为假");
end
if 0 then
print("数字0 为真");
else
print("数字0 为假");
end
-- false 和 nil为假
-- 数字0 为真
number
Lua 默认只有一种 number 类型 — double(双精度)类型(默认类型可以修改 luaconf.h 里的定义)
print(type(2)) -- number
print(type(2.2)) -- number
print(type(0.2)) -- number
print(type(2e+1)) -- number
print(type(0.2e-1)) -- number
print(type(7.8263692594256e-06))-- number
string
字符串由一对双引号或单引号来表示。也可以用 2 个方括号 “[[]]” 来表示”一块”字符串。
string1 = "this is string1";
string2 = 'this is string2';
html = [[
<html>
<head></head>
<body>
<a href="http://www.runoob.com/">菜鸟教程</a>
</body>
</html>
]];
print(html);
table
Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。
不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始
table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。
function
Lua中,函数不支持重载,多个同名函数时,默认调用最后一个声明的函数
在 Lua 中,函数是被看作是”第一类值(First-Class Value)”,函数可以存储在变量里:
function add(n1, n2)
return n1 + n2;
end
print(add(5, 6)); -- 11
function 可以以匿名函数(anonymous function)的方式通过参数传递:
function add(n1, n2, fun)
local sum = n1 + n2;
print("add函数: " .. sum);
fun(sum);
end
function myFunc(n)
print("myFunc函数: " .. n);
end
add(1, 2,
function(n)
print("myFunc函数: " .. n);
end);
print("------------------");
add(3, 4, myFunc);
-- add函数: 3
-- myFunc函数: 3
------------------
-- add函数: 7
-- myFunc函数: 7
thread
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
参考链接
[Lua虚拟机解析系列]01 Lua中的数据类型 https://zhuanlan.zhihu.com/p/98082472