时间:2021年3月24日14:16:34
参考:https://www.runoob.com/lua/lua-tutorial.html
一、开始
- Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- 应用场景
游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
安全系统,如入侵检测系统
二、基础
2.1 脚本
- 安装软件包后,在命令行中执行命令,或者执型脚本文件。
例如,输入:
print("hello word!")
- 脚本文件后缀是 .lua
2.2 注释
- 单行注释:--
- 多行注释:
--[[
注释内容
--]]
2.3 标识符
- 区分大小写;
- 组成元素是大小写字母a-z和A-Z、数字0-9以及下划线;
- 首字母必须为字母或者下划线,不能是数字;
- 注意不要和关键字重复
2.4 关键字
and break do else
elseif end false for
function if in local
nil not or repeat
return then true until
while goto
2.5 变量
- 定义
var1 = 10
var2 = 'string'
- 删除
赋值为nil即为删除
var = nil
2.6 数据类型
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
2.7 字符串
(1)表示方式
str="string"
str2='string'
str3=[[
good job!
]]
(2)字符串连接用 ..
取变量的字节长度用 #
var1=10
var2="good job"
print(#var2 .. var1)
2.8 table 表
(1)定义
--建立空的表
local table = {}
--直接初始化表
local table = {"English", "Chines", "Math", "Physics", "Politics"}
(2)使用
有点类似于建立字典;
表示关联的数组;
可以设置唯一键值,通过映射关系找到关联的“表项”
--建立空的表
local ta = {}
--赋值
ta["key"] = "keyword"
ta[10] = 20
--打印
for a, b in pairs(ta) do
print(a .. " : " .. b)
end
2.9 函数
(1)关键词: function
例子:
function fun(n)
if n >= 0 then
return 1
else
return 0
end
end
print(fun(10), fun(-10))
(2)多返回值
function fun()
return 1,10
end
print(fun())
(3)可变参数
re = 0
function sum(...)
for i, v in ipairs{...} do
re = re + v
end
return re
end
print(sum(1,2,3,4,5))
或者使用select函数
re = 0
function sum(...)
for i=1, select('#',...) do
re = re + select(i,...)
end
return re
end
print(sum(1,2,3,4,5))
2.10 变量
默认为全局变量,使用关键词 local 修饰的变量为局部变量。
(1)变量赋值
--多个变量赋值
num1, num2 = 1, 2
--两个变量交换数值
num1, num2 = num2, num1
print(num1, num2)
2.11 流程语句
(1)条件语句
关键字: if、else、then、end
例子:
if(1) then
print("1 is comming")
else
print("0 is comming")
end
(2)while循环
语法:
while(condition)
do
statements
end
(3)for循环
语法:
for var=exp1,exp2,exp3 do
<执行体>
end
以exp1和exp2为范围,exp3为步长做的循环,其中exp3可以不写,默认为1
例子:
for i=1,10,1 do
print(i)
end
for i=10,1,-1 do
print(i)
end
泛型for循环
例子(也可以用 pairs):
a = {"a", "b", "c"}
for i, v in ipairs(a) do
print(i,v)
end
(4)repeat - until循环
语法:
repeat
statements
until( condition )
例子:
a = 1
repeat
a = a + 1
print(a)
until( a > 10 )
满足条件才会打破循环,这与c语言的do...while语句不同。
2.12 运算符
包括算术运算符、关系运算符和逻辑运算符,其中前两者与c语言类似,不展开写了,而逻辑运算符有:
and、or、not
例子:
if(true and false)
then
print("true and false")
end
if(true and true)
then
print("true and true")
end
if(true or false)
then
print("true or false")
end
if(true or true)
then
print("true or true")
end
if(not true)
then
print("not true")
end
if(not false)
then
print("not false")
end
2.13 字符串
(1)定义
单引号 'string'
双引号"string"
中括号[[stirng]]
(2)转义字符
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符''' | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
(3)字符串 操作
- 大小写转换
string.upper(arg) 和 string.lower(arg) - 字符串替换
string.gsub(main_str, find_str, repalce_str, num) - 查找字符串并返回位置(注: [] 里面的参数代表可选)
string.find(main_str, sub_str, [init, [end]]) - 字符串反转
sring.reverse(arg) - 字符串格式化获取(类似于C风格sprintf)
string.format(...) - char将整形数字转化为字符并连接;byte将字节值转换为字符并连接
string.char(arg)
string.byte(arg[,int]) - 计算字符串长度
string.len - 返回字符串的n个拷贝
string.rep(string, n) - 连接两个字符串
.. - 寻找pattern模式下的字符串
string.gmatch(str, pattern) - 寻找pattern模式下的字符串,并指定起始点
string.match(str, pattern, init)
2.14 数组
和表类似,
array={"1", "2"}
三、常用函数
- print :打印内容
例子:
print("OK")
var = 1
print("var ",var);
- type:获取数据的类型,例子:
var1=10
var2='nfasf'
print(type(var1))
print(type(var2))
print(type(true))
网友评论