一 基本类型
可以使用 type 测定给定变量或值的类型
一 nil(空)
表示一个无效值(在表达式中相当于false)
- 给 全局变量 和 table 表里的变量赋一个 nil 的值,等同于把它们删掉
tab = {key1 = "val1", key2 = "val2", "val3"}
for k, v in pairs(tab1) do
print(k.." - "..v)
end
tab1.key1 = nil
for k, v in pairs(tab1) do
print(k.." - "..v)
end
- 如果有 type(变量) 这个形式,nil 作比较时应该加上双引号
> type(X)
nil
> type(X)==nil
false
> type(X)=="nil"
true
二 boolean (布尔)
包含 false 和 true
- false ,nil,0 为假,其它都为 true
print(type(true))
print(type(false))
if false or nil then
print("至少一个是 true")
else
print("false 和 nil 都为 false")
end
三 number (双精度)
表示双精度类型浮点数
- 默认 – double(双精度)
print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(0.2e-1))
print(type(3.4235235e-06))
四 string(字符串)
由一对双引号或单引号表示
- 也可以用两个方括号 “ [[ ” 来表示“一块”字符串
html = [[
<htnl>
<head></head>
<body>
]]
- 再对以个数字字符串上进行算数操作是,lua 会将这个数字字符转成一个数字
> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6
--字符串连接使用的是 ..
> print("a" .. "b")
ab
> print(157 .. 428)
157428
3.使用 # 计算字符串的长度
> len = "www.runood.com"
> print(#len)
14
> print(#"www.runood.com")
14
五 function (函数)
- 函数被看作“第一类值”,函数可以存在变量里
function factorial1(n)
if n==0 then
return 1
else
return n * factorial(n-1)
end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))
- 可以以匿名函数的方式通过参数传递
-- function_test2.lua 脚本文件
function testFun(tab, fun)
for k, v in pairs(tab) do
print(fun(k, v));
end
end
tab={key1="val1", key2="val2"};
testFun(tab,
--
function(key,val) --匿名函数
return key.."="..val;
end
--
);
六 userdata (自定义类型)
表示任意存储在变量中的C/C++数据结构
七 thread (线程)
表示独立线路,用于执行协同程序
八 table (表)
01 通过“构造表达式”来构建
-
数组的索引可以是数字或者是字符串
-
表里面的默认初始索引一般以1开始
-
table 不会固定长度大小,没初始值的 table 都是 nil
-- 创建一个空的 table
tbl1 = {}
for i=1, 10 do
tbl1[i] = i
end
tbl1["key1"]="val"
print(tbl1["key1"])
print(tbl1["none"])
-- 直接初始表
tbl2 = {"apple", "pear", "orange", "grape"}
二 变量
-
Lua 变量的三种类型:全局变量,局部变量,表中的域
-
Lua 中变量全是 全局变量,哪怕是语句块或是函数里,除非用local 显式声明为局部变量
-
局部变量的作用域为声明位置开始到所在语句块结束
-
变量的默认值均为 nil
a=5 local b=5 function joke() c=5 local d=6 end joke() print(c,d) --> 5 nil do local a=6 b=6 print(a,b); --> 5 6 end print(a,b) --> 5 6
一 赋值语句
-
赋值是改变一个变量的值和改变表域的最基本的方法
-
Lua 可以对多个变量赋值
a, b = 10, 2*x --等价于--> a = 10; b = 2*x;
-
遇到赋值语句 Lua 会先计算右边所有的值然后再执行赋值操作
x, y = y, x 'x' for 'y' a[i], a[j] = a[j], a[i] 'a[i]' for 'a[j]' --[[ 1. 变量个数 > 值的个数 按变量个数补足 nil 2. 变量个数 < 值的个数 多余的值会被忽略 --]]
-
多值赋值经常用来交换变量,或将函数调用返回给变量
-
应该尽可能使用局部变量
① 避免命名冲突
② 访问局部变量的速度比全局变量更快]
二 索引
-
对 table 的索引使用方括号 []
-
Lua也提供了 . 操作
> site = {}
> site["key"] = "I am ok"
> print(site["key"])
I am ok
> print(site.key)
I am ok