基本语法
-
lua -i: 交互式编程 -
lua hello.lua默认脚本式编程 -
注释语法
-- 单行注释
--[[
多行注释1
多行注释1
]]
- 空格,没有硬性要求,为了提高代码的可读性,适当的缩进
- 换行:
-- 如果是局部变量,定义在同一行代码中,值可以正常操作
> local i=0 print("i:",i)
i: 0
-- 如果是局部变量,定义在不同行,且不再代码块中,可能无法操作
运算符
算术运算符
下表显示了 Lua 语言支持的所有算术运算符。 假设变量 A 持有 10 并且变量 B 持有 20 然后 −
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 添加两个操作数 | A + B 将得到 30 |
| - | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 两个操作数相乘 | A * B 将得到 200 |
| / | 分子除以分母 | B / A 将得到 2 |
| % | 取模运算符和整数除法后的余数 | B % A 将得到 0 |
| 指数运算符取指数 | A^2 将得到 100 | |
| - | 一元 - 运算符作为否定 | -A 将得到 -10 |
关系运算符
下表显示了 Lua 语言支持的所有关系运算符。 假设变量 A 持有 10 并且变量 B 持有 20 然后 −
| 运算符 | 描述 | 示例 |
|---|---|---|
== | 检查两个操作数的值是否相等,如果是则条件为真。 | (A == B) is not true. |
~= | 检查两个操作数的值是否相等,如果值不相等则条件为真。 | (A ~= B) is true. |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) is not true. |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) is true. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) is not true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是的,则条件将变为true。 | (A <= B) is true. |
逻辑运算符
下表显示了 Lua 语言支持的所有逻辑运算符。 假设变量 A 为真,变量 B 为假,则 −
| 运算符 | 描述 | 示例 |
|---|---|---|
| and | 称为逻辑与运算符。 如果两个操作数都不为零,则条件为真。 | (A and B) is false. |
| or | 称为逻辑或运算符。 如果两个操作数中的任何一个非零,则条件变为真。 | (A or B) is true. |
| not | 称为逻辑非运算符。用于逆转其操作数的逻辑状态。 如果条件是 true,则逻辑非运算符结果会是 false。 | !(A and B) is true. |
杂项运算符
| .. | 连接两个字符串。 | a..b 其中 a 是"Hello",b 是"World",将返回"Hello World"。 |
| # | 返回字符串或表格长度的一元运算符。 | #"Hello" 将返回 5 |
数据类型
默认情况下,所有变量都将指向 nil,直到它们被赋值或初始化。 在 Lua 中,在条件检查的情况下,零字符串和空字符串被认为是真的。 因此,在使用布尔运算时必须小心。 我们将在接下来的章节中了解更多使用这些类型的信息
变量
-- 局部变量
-- 声明字符串,可以用单引号或双引号,
local str = 'hello'
-- 字符串拼接可以使用 ..
local str2 = 'hello' .. 'world'
-- 声明数字
local num = 21
-- 声明布尔类型
local flag = true
local i=1,j j =2 print(i,j) -- true
local i,j,k=10,20,30 print(i,j,k) -- true
local i=1,j=2 print(i,j) -- 错误写法
-- 全局变量
i=1
j=2
print(i,j)
i=1 ,j
j=2
print(i,j)
i,j,k=10,20,30
print(i,j,k) -- true
Lua中的table类型既可以作为数组,又可以作为Java中的map来使用。数组就是特殊的table,key是数组角标而已:
-- 声明数组 ,key为角标的 table
local arr = {'java', 'python', 'lua'}
-- 声明table,类似java的map
local map = {name='Jack', age=21}
Lua中的数组角标是从1开始,访问的时候与Java中类似:
-- 访问数组,lua数组的角标从1开始
print(arr[1])
Lua中的table可以用key来访问:
-- 访问table
print(map['name'])
print(map.name)
循环
for
语法
for 初始步骤, 最大/最小值 ,步进值
do
代码块
end
举例1
for i=0, 10 ,2
do
print("i = ",i)
end
注:
for i=10, 10 ,2结果是循环体会执行一次
while
语法
while(条件判断语句)
do
单个语句或者语句块
end
举例
t = 1
while (t < 3) -- 表达式
do
print("t :", t)
t = t + 1
end
repeat...until
语法
repeat
代码块
until(条件判断语句)
注意: until(结束条件) 也就是说until(true) 是结束这个循环,而不是进入循环 当until(false)时是进入循环
举例
a=10
repeat
print("a的值为:", a)
a = a + 1
until( a > 15 )
迭代器
举例1:遍历数组
-- 声明数组 key为索引的 table
local arr = {'java', 'python', 'lua'}
-- 遍历数组
for index,value in ipairs(arr) do
print(index, value)
end
举例2:遍历普通table
-- 声明map,也就是table
local map = {name='Jack', age=21}
-- 遍历table
for key,value in pairs(map) do
print(key, value)
end
函数
定义函数的语法:
function 函数名( argument1, argument2..., argumentn)
-- 函数体
return 返回值列表
end
例如,定义一个函数,用来打印数组:
function printArr(arr)
for index, value in ipairs(arr) do
print(value)
end
end
需求:自定义一个函数,可以打印table,当参数为nil时,打印错误信息
function printArr(arr)
-- 当arr为nil时(即false),not arr表示true
if not arr then
print('数组不能为空!')
return nil
end
for index, value in ipairs(arr) do
print(value)
end
print("---")
end
条件控制
类似Java的条件控制,例如if、else语法:
if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
Citation:
References: