注释

--我是单行注释
--[[
 我是多行注释
 我是多行注释
 --]]

全局变量与局部变量

lua的变量默认就是全局的,创建即全局,即使是函数中声明的变量也默认为全局,声明局部变量用local修饰符:

a = 10 --全局变量
local b = 15 --局部变量

function test()
    c = 20 --全局变量
    local d = 50 --局部变量
end

释放变量:将nil赋值给变量即可释放,lua会自动清理内存。

数据类型

print(type())来查看数据类型。nil在布尔运算中同等falsex=nil,type(x)返回nil,type(x)==nil返回false。字符串可以也用双中括号包括住。
与别的编程语言不同,lua数组索引是从1开始的。

  • nil
  • boolean
  • number
  • string
  • function
  • userdata
  • thread
  • table

赋值语句

a,b = 1,2 -- a=1,b=2
x,y = y,x -- 交换变量的值

循环

break语法不解释。

while循环:

while(condition)
do
   statements
end

无限循环:

while( true )
do
   print("无止境的循环")
end

泛型for循环:

千万不要忘记使用ipairs函数。

array = {"PHP","Python","Perl"}
for i,l in ipairs(array) do print(i,l) end
输出:
1  PHP
2  Python
3  Pler

repeat ...until循环:

x=0
repeat
    print(x)
    x = x + 1
until(x>100)

流程控制

if()
then
    --
elseif()
then
    --
else
    --
end

函数

lua的函数定义之后默认是全局的,如需定义局部函数需要在前面加local关键词,并且可以有多个返回值。

函数基本定义:

function name([args])
    [body]
    [return]
end

可变参数:

可变参数是指,函数中的参数数量是可变的,数量不确定的,这时我们可以用...表示可变参数,常在函数配合泛型for循环使用

function test(...)
    return {....}
end

for key,value in ipairs{...} do end

select("#",...)获取可变参数的参数数量。

function test(...)
    return select("#",...)
end

通过`select(n,...)获取可变参数中位于索引为n的参数值。

function test(...)
    return select(n,...)
end

固定参数+可变参数组合的时候,固定参数要放在前面。

function test(arg1,arg2,arg3,...)
    [function_body]
end

运算符

逻辑运算符:

  • and:逻辑与
  • or:逻辑或
  • not:逻辑非

关系运算符:

  • ==:等于
  • ~=:不等于
  • >=:大于等于
  • <=:小于等于
  • >:大于
  • >:小于

其他运算符:

  • ..:链接两个字符字符串
  • #:返回长度

优先级:

^
not    - (unary)
*      /
+      -
..
<      >      <=     >=     ~=     ==
and
or

字符串

转义字符:

转义字符

常用的字符串操作函数:

  • string.upper(str)
  • string.lower(str)
  • string.gsub(string,要被替换的字符,要替换的字符,替换次数)
  • string.len(str)
  • string.rep(str,需要拷贝的次数)
  • string.find(str,str) -- 返回一个number,表示所在位置
  • string.reverse(str)
  • string.format -- 类似C语言中的printf
  • string.char -- 整型转换字符
  • string.char -- 字符转换整形
  • string.match
  • string.gmatch(str,pattern)

string.match参考资料:http://www.runoob.com/manual/lua53doc/manual.html#pdf-string.match
string.gmatch参考资料:http://www.runoob.com/manual/lua53doc/manual.html#pdf-string.gmatch

数组

值得注意的一点是,不同于其他语言,lua数组的索引是从1开始的。

numbers = {1,2,3,4,5}

for i in ipairs(numbers) do
   print(numbers[i])
end

多维数组不进行概述,通常用多层for循环进行赋值。

表:table

table是个关联数组,用来创造各种数据类型,如数组和字典等。

table1 = {}
table2 = {}

table1[1] = "Hello World!"
table2["url"] = "liangxingjian.com"

print(table1[1]) -- "Hello World!"
print(table2["url"]) -- "liangxingjian.com"

常用的table操作函数:

  • table.concat(table_name,链接符)
  • table.insert(table_name[,指定索引],插入的内容)
  • table.remove(table_name) --移除最后一个元素
  • table.sort(table_name)

模块

新建两个文件:

  • main.lua
  • blog.lua

编辑"blog.lua":

blog={}

blog.url = "liangxingjian.com"
blog.name = "梁兴健个人博客"

function blog.write_post(title,content)
        print("文章标题:"..title)
        print("文章内容:"..content)
end

return blog

编辑"main.lua":

require "blog"
print(blog.url)
print(blog.name)
blog.write_post("快速入门lua","此处省略一万个字")

运行"main.lua":

liangxingjian.com
梁兴健个人博客
文章标题:快速入门lua
文章内容:此处省略一万个字

标签: Lua

已有 7 条评论

  1. PHPer路过

  2. 没有这方面知识,我看不懂哈哈,学习了

  3. 难道博主要自己写Lua脚本了吗?

    1. 只是闲着无聊想找点东西学学

  4. 一脸懵逼的表示看不懂

  5. MARK收藏。。。

添加新评论