基础:
用标准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()