lua 基础语法
#!/usr/local/bin/lua
注释 --
输出 print("Hello World!")
数据类型
1、nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
2、boolean 包含两个值:false和true。
3、number 表示双精度类型的实浮点数
4、string 字符串由一对双引号或单引号来表示
5、function 由 C 或 Lua 编写的函数
type 函数 测试给定变量或者值的类型
2 个方括号 "[[]]" 表示"一块"字符串。
html = [[ <html> <head></head> <body> <a href="http://www.1111.com/">111</a> </body> </html> ]] print(html)
table表 的创建是通过"构造表达式"来完成,最简单构造表达式是{} local tbl1 = {}
"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。 在 Lua 里表的默认初始索引一般以 1 开始
-- table_test.lua 脚本文件 a = {} a["key"] = "value" key = 10 a[key] = 22 a[key] = a[key] + 11 for k, v in pairs(a) do print(k .. " : " .. v) end
function(函数)
-- function_test.lua 脚本文件 function factorial1(n) if n == 0 then return 1 else return n * factorial1(n - 1) end end print(factorial1(5)) factorial2 = factorial1 print(factorial2(5))
Lua 变量
lua 循环
1、while 循环 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
2、for 循环 重复执行指定语句,重复次数可在 for 语句中控制。
for var=exp1,exp2,exp3 do <执行体> end -- ar 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。 --泛型 for 循环通过一个迭代器函数来遍历所有值 --打印数组a的所有值 a = {"one", "two", "three"} for i, v in ipairs(a) do print(i, v) end
3、repeat...until 重复执行循环,直到 指定的条件为真时为止
4、循环嵌套 可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)
流程控制
1、if 语句 if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
2、if...else 语句 if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码。
--[ 定义变量 --] a = 100; --[ 检查条件 --] if( a < 20 ) then --[ if 条件为 true 时执行该语句块 --] print("a 小于 20" ) else --[ if 条件为 false 时执行该语句块 --] print("a 大于 20" ) end print("a 的值为 :", a)
3、if 嵌套语句 你可以在if 或 else if中使用一个或多个 if 或 else if 语句 。
lua 函数
--[[ 函数返回两个值的最大值 --]] 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))
lua 运算符
1、关系运算符 + - * /
2、逻辑运算符 == != >=
3、逻辑运算符 and or not
4、其它
.. 连接两个字符串 a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
# 一元运算符,返回字符串或表的长度。 #"Hello" 返回 5
lua 字符串
1、字符串操作
1 string.upper(argument): 字符串全部转为大写字母。
2 string.lower(argument): 字符串全部转为小写字母。
3 string.gsub(mainString,findString,replaceString,num) 在字符串中替换。
mainString 为要操作的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换),如:string.gsub("aaaa","a","z",3);zzza 3
4 string.find (str, substr, [init, [plain]]) 在一个指定的目标字符串 str 中搜索指定的内容 substr,如果找到了一个匹配的子串,就会返回这个子串的起始索引和结束索引,不存在则返回 nil。
init 指定了搜索的起始位置,默认为 1,可以一个负数,表示从后往前数的字符个数。
plain 表示是否使用简单模式,默认为 false,true 只做简单的查找子串的操作,false 表示使用使用正则模式匹配。
以下实例查找字符串 "Lua" 的起始索引和结束索引位置:string.find("Hello Lua user", "Lua", 1) 7 9
5 string.reverse(arg) 字符串反转
6 string.format(...) 返回一个类似printf的格式化字符串 string.format("the value is:%d",4)
7 string.char(arg) 和 string.byte(arg[,int]) char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
8 string.len(arg) 计算字符串长度。string.len("abc") 3
9 string.rep(string, n) 返回字符串string的n个拷贝 > string.rep("abcd",2) abcdabcd
10 .. 链接两个字符串
11 string.gmatch(str, pattern) 返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
> for word in string.gmatch("Hello Lua user", "%a+") do print(word) end
Hello
Lua
user
12 string.match(str, pattern, init) 只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。
> = string.match("I have 2 questions for you.", "%d+ %a+")
2 questions
13 string.sub() 用于截取字符串 截取部分,第4个到第15个 local first_sub = string.sub(sourcestr, 4, 15) print("\n第一次截取", string.format("%q", first_sub))
匹配模式直接用常规的字符串来描述。 它用于模式匹配函数 string.find, string.gmatch, string.gsub, string.match。
单个字符(除 ^$()%.[]*+-? 外): 与该字符自身配对
- .(点): 与任何字符配对
- %a: 与任何字母配对
- %c: 与任何控制符配对(例如\n)
- %d: 与任何数字配对
- %l: 与任何小写字母配对
- %p: 与任何标点(punctuation)配对
- %s: 与空白字符配对
- %u: 与任何大写字母配对
- %w: 与任何字母/数字配对
- %x: 与任何十六进制数配对
- %z: 与任何代表0的字符配对
- %x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
- [数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
- [^数个字符类]: 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对
当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对.例如,'%A'非字母的字符:
lua 数组 array = {"Lua", "Tutorial"}
lua 表 mytable = {} table.concat 连接 table.insert 插入 table.remove删除 table.sort排序
lua 迭代器
array = {"Google", "Runoob"} for key,value in ipairs(array) do print(key, value) end
lua 模块 require("<模块名>")
lua 文件IO 库用于读取和处理文件
-- 以只读方式打开文件 file = io.open("test.lua", "r") -- 输出文件第一行 print(file:read()) -- 关闭打开的文件 file:close() -- 以附加的方式打开只写文件 file = io.open("test.lua", "a") -- 在文件最后一行添加 Lua 注释 file:write("--test") -- 关闭打开的文件 file:close()