基础:
用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
注释:
-
单行注释
--
-
多行注释
--[[ 多行注释 多行注释 --]]
变量:
-
局部变量
-- 局部变量赋值 local b=2
-
全局变量
-- 全局变量赋值 a=1
-
如果没赋值,则为nil,类似Java的null
Lua的数据类型:
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回
数据类型 | 描述 |
---|---|
nil | 表示一个无效值(在条件表达式中相当于false) |
boolean | true 或者 false |
number | 双精度浮点数 |
string | 双引号或者单引号 |
function | 由c或者lua编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
流程控制:
if条件语句
-
if语句
if(布尔表达式)then --[ 在布尔表达式为 true 时执行的语句 --] end
-
if - else 语句
if(布尔表达式)then --[ 布尔表达式为 true 时执行该语句块 --] else --[ 布尔表达式为 false 时执行该语句块 --] end
循环语句
-
while循环
while(condition)do Statements end
-
实例
a=10 while( a < 20 )do print("a 的值为:", a) a = a+1 end
-
-
for循环
for var=exp1,exp2,exp3 do <执行体> end
var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 执行体,exp3 是可选的,如果不指定,默认为1
-
repeat…until语句 [满足条件结束]
repeat Statements until( condition )
函数
lua中也可以定义函数,类似于java中的方法
--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 调用函数
print("两值比较最大值为 "..max(10,4))
print("两值比较最大值为 "..max(5,6))
PS:..
表示拼接
表
Table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用
mytable = nil
模块
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
print("这是一个公有函数")
end
local function func2()
print("这是一个私有函数!")
end
function module.func3()
func2()
end
return module
-
require 函数
require 用于 引入其他的模块,类似于java中的类要引用别的类的效果
require("<模块名>") require "<模块名>"
我们可以将上面定义的module模块引入使用,创建一个test_module.lua文件,在其中使用module模块内的方法
-- test_module.lua 文件 -- module 模块为上文提到到 module.lua require("module") print(module.constant) module.func3()