简介
- Lua是脚本型语言
- 是C语言编写的
- 速度比C语言快
特性
Lua的Hello World
Lua行末不要分号
Lua的括号
Lua语言几乎用不到大括号,取而代之的是do…end
Lua的注释
1 2 3 4 5 6 7 8 9
| // 双斜杠不是注释了哦
/* 这不是多行注释了哦 */
|
小心不要变成纯文本了
1 2 3 4 5
|
a = [[<html><head></head><body></body></html>]]
|
数据类型
1 2
| a = "I'm a" print("a is "..a)
|
Lua的数据类型是动态可变的
Lua的数据类型
- 数字类型
- 整型
- 浮点型
- long double 等 都是 数字类型,并没有明确划分
- 字符串类型
- thread类型
- function类型
- table
- 其他类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| a = function(x) print("user input is "..x) end
a("test")
myTable = {12,13} print(myTable) for k,v in pairs(myTable) do print(k,v) end
|
变量作用域
1 2 3 4 5 6 7 8 9 10 11 12
| b = "123" local c = 12
local function () print("i'm lua") end
local function myfuntion2() local a = "hello" return a end
|
- 其他lua文件引用该lua文件的时候,将无法访问到
local
标记的变量
- 相当于 是一个 private 的变量
- 反之 如果不加
local
标识符,那么Lua默认的是全局变量global
类型
如果一个function函数中创建的变量不是local的,就意味着它是一个global变量
if语句(没有switch语句)
1 2 3 4
| local a = 12 if a == 12 then print("a's value is 12") end
|
1 2 3 4 5 6
| local a = 2 if a == 2 then print("value is 12") else print("value is not 12") end
|
1 2 3 4 5 6
| local a = 12 if a == 12 then print("value is 12") elseif a ~= 11 then print("value is not 11") end
|
这里不等于符号是 ~=
注意注意!!!!!
函数/方法
无参无返回值
1 2 3
| local function f1() print("hello") end
|
有参无返回值
1 2 3
| local function f2(a) print(a) end
|
有参有返回值
1 2 3 4 5 6 7
| local function f3(a) a += 2 return a end
a = f3(123)
|
返回多个值
1 2 3 4 5 6
| local function f4() return 1,2 end
local a,b = f4()
|
可变参数列表
1 2 3 4 5 6 7 8 9 10
| local function f5(...) local myTable = {...} for k,v in pairs(myTable) do print(k,v) end end
f5("12",123,"ok")
|
库函数
- print() 就是一个很明显的print(),因为我们没有定义它
- 有些函数是Lua自带的
逻辑操作符
and 和 or 就类似于 C语言中的 && 和 ||
- and
- 如果我们第一个需要去计算的操作数,如果操作数是假,则返回第一个操作数
- 反之则返回第二个操作数
1 2 3 4
| print(1 and 2)
print(false and 5)
|
- or
- 如果第一个我们需要去计算你的操作数为真,返回第一个值
- 反之返回第二个值
1 2 3 4
| print(1 or 5)
print(false or 5)
|
not 类似于 C语言的 ! 取反
1 2 3 4
| print( not nil)
print( not 1)
|
循环语句
while
1 2 3 4 5 6
| local index = 1 local mytable = {1,2,3} while mytable[index] do print(mytable[index]) index = index+1 end
|
do……while换成了 repeat
1 2 3 4
| repeat line = io.read() print(line) until line ~= ""
|
for循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| for i = 1, 5 do print(i) end
for i = 1, 10, 2 do print(i) end
for i = 20, 10, -2 do print(i) end
table = {1,2,3} for i=1, #table do print(table[i]) end
|
上述可见,for 后面有三个参数 一个是初始化i,一个是结束判断,一个是加减i(默认为1)
Table的使用
- Table类似于Java的list和map的结合体
1 2 3 4 5 6 7 8 9 10
| local MyTable = { 1, 2, 3, 4, 5, table2 = {1,2,3}, "ok" }
|
为什么上面的table2的索引部位6呢?
Table的遍历方式
- Table的复杂性导致其有三种遍历方式
- 因为Table既是链表类型又是键值对类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| myTable = { k = "x" } print(myTable[k])
print(myTable["k"])
print(myTable.k)
s = "ok" myTable[s] = 10 print(myTable[s])
|
myTable.k 与 myTable[“k”]有所不同
- myTable.k 等价于 myTable[“k”],索引的键就变成了字符串
- myTable[k] 表示用变量k的值来索引table,索引的键可以是其他
普通遍历方式
1 2 3 4 5 6 7 8
| myTable={ 1,2,3,4,k = "ok",5 }
for i=1, #myTable do print("value is "..myTable[i]) end
|
for ipairs(迭代器)
1 2 3
| for i,v in ipairs(myTable) do print(i,v) end
|
与第一种for循环方式一样,都是按照当前索引的隐式索引来迭代并显示值的
for pairs(迭代器)
1 2 3
| for k,v in pairs(myTable) do print(k,v) end
|
按照键值对来输出
如果值为一个table,则会输出该table的地址
Table的作用
- 你可以作为第三方插件集成到项目中,为项目提供一个支持功能
- 完全使用table进行开发
- 当做一种数据的配置集(就是阵列)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
application_config = { game_config = { ifDebugModel = false, isCheatModel = true },
sound_config = { isBackgroundMusicOpen = true, isEffectOpen = false },
textrure_config = {
版权声明: 本博客所有文章除特别声明外,均采用 null 许可协议。转载请注明来自 安全书!
|