Lua世界中,可以通过type
函数来识别类型,如:
print(type("hello word")); // string
print(type(print)); // function
print(type(false)); // boolean
print(type(360)); // number
print(type({})); // table
print(type(nil)); // nil
字符串 string
Lua中,字符串变量是不可变的,如果你去更改(拼接、重新赋值)它,就等于新建字符串。这样子的做法,有好处也有坏处,好处是同样的字符串多次出现,在内存当中会存在一次;不好的地方,就是对字符串修改,新增了很多必要的字符串。
在Lua中,使用..
来做字符串的链接操作;如:print("红酒" .. "花生");
,输出“红酒花生”;有三种表示字符串的方式,分别是:单引号(''),双引号(""),双层中括号([[]]、[=[]=]);
print(type("红酒花生")); // string
print(type('红酒花生')); // string
print(type([[红酒花生]])); // string
print(type([=[红酒花生]=])); // string 主要用在输出的字符串中,又包含[]的情况
函数 function
函数是Lua中的一等公民,可以当作把函数放在一个变量中,也可以把它当作函数的入参和出参;
如:
local sayhi = function()
end
local function sayhi()
end
以上两种声明方式,是完全等价的。
布尔 boolean
false 和 true,也是计算机世界中的0 和 1;这个简单。
但是在Lua中,只有 nil
和 false
是假,其他的都为真,注意:0 也是真。
local a = 0;
if a then
print('true');
end
数字 number
Lua的number类型,是使用双精度浮点数来实现的。值得一提的是,LuaJIT支持dual-number(双数)模式,Lua会根据上下文用整形来储存整数,用双精度来储存浮点数。此外,LuaJIT还支持大整形,如:
print(9223372036854775807LL - 1) // 9223372036854775806LL 大整形数相减
table
table是Lua中唯一的数据结构。其中的结构可以是关联的方式存在,也可以是下标的方式存在,可混合。
local color = {first = "red", two="blue"};
print(color["two"]) // blue 注意:申明的地方,下标不需要引号,取值的时候,下标需要引号。
local a = {};
a[1] = 1;
print(a[1]); // 1
空值 nli
申明一个变量,没有赋值,它的默认值就是 nil
,ngx.null 的也是空