Lua基础语法
1.初识Lua
Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网: https://www.lua.org/
在Linux虚拟机的任意目录下,新建一个hello.lua
# 创建文件
touch hello.lua
# 编辑文件
vi hello.lua
# 在文件添加如下内容
print("Hello World!")
#按ESC 输入下面命令退出保存
:wq
# 不保存
:q
# 强制退出
:q!
2.变量和循环
2.1变量
#数据类型
nil # 只有值nil属于该类,表示无效值(在条件表达式中相当于false)
boolean #包含两个值:false 和 true
number #表示双精度类型的实浮点数
string # 字符串由一对双引号或者单引号表示
function # 由C或Lua编写的函数
table # Lua中的表(table) 其实是一个"关联数组" (associative arrays) ,数组的索引可以是数字、字符串或表类型。在Lua 里,atable的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
# 可以利用type函数测试给定变量或者值的类型
print(type("Hello World!"))
# string
print(type(print))
# function
#变量
Lua声明变量的时候,并不需要指定数据类型
-- 声明字符串
local str ='hello';
--声明数字
local num =21
-- 声明布尔类型
local flag = true
--声明数组 key为索引的 table
local arr = {'java','python','lua'}
-- 声明table,类似java的map
local map = {name = 'jack',age=21}
-- 声明 字符拼接
local str = 'hello' .. 'world' print(str) = helloworld
访问table:
-- 访问数组,lua数组的角标是从1开始
print(arr[1])
-- 访问table
print(map['name'])
print(map.name)
2.2循环
数组、table都可以利用for循环来遍历
遍历数组
-- 声明数组key为索引的table
local arr = {'java','python','lua'}
-- 遍历数组
for index,value in ipairs(arr) do
print(index,value)
end
遍历table
-- 声明map,也就是table
local map = {name='jack',age=21}
-- 遍历table
for key, value in pairs(map) do
print(key, value)
end
-- 运行lua文件
lua hello.lua
3.条件控制、函数
3.1函数
定义函数的语法
function 函数名(argument1,argument2...,argumentn)
-- 函数体
return 返回值
end
例子:定义一个函数,来打印数组
function printArr(arr)
for index, value in ipairs(arr) do
print(value)
end
end
-- 调用printArr函数
printArr(arr)
3.2条件控制
类似Java的条件控制,例如:if、else语法:
if(布尔表达式)
then
--[布尔表达式为 true 时执行该语句块]
else
--[布尔表达式为 false 时执行该语句块]
end
与java不同,布尔表达式中的逻辑运算是基于英文单词:
and
逻辑与操作符。若A为false, 则返回A,否则返回B。
or
逻辑或操作符。若A为true, 则返回A, 否则返回B。
not
逻辑非操作符。与逻辑运算结果相反,如果条件为true, 逻辑非为false。
题目练习:
需求:自定义一个函数,可以打印table, 当参数为nil时,打印错误信息
-- 定义一个数组变量(table)
local arr = {'java','python','lua'}
local arr2 = {'java','python','lua','C'}
-- 编写函数
local function printArr(arr)
if(not arr) then
print('数组不能为空')
return nil
end
for key, value in ipairs(arr) do
print(value)
end
end
-- 调用函数
printArr(arr)
printArr(arr2)
printArr(nil)