Lua 语法摘要

Lua详解http://www.runoob.com/lua/lua-metatables.html

Lua:轻量级脚本语言,不需要编译,直接运行,所有脚本语言都有这个特点

执行lua方式:(交互式编程,脚本式编程)

Lua文件是.lua后缀的

Lua语句相对C#等编译语言比较随意,语句末不用写分号也可以写分号

注释方法:单行注释:-    /     多行注释:--[[   .........   ]]-- 或 --[[ ....--]] 或 --[[ ...]]

变量:

Lua不需要写变量类型 ==> 变量名 = 值

Lua区分大小写

变量存储什么类型数据就是什么类型 类似于 var

使用type来获取变量的类型

Lua数据类型:

Number:小数类型(Lua没整型和浮点的区分)

boolean:布尔类型 (Lua里把false和nil看作是假,其他都是真)

nil:表示空数据,相当于null,对于未定义的变量,输出的结果都是nil

string:字符串类型,可以使用双引号表示,也可以使用单引号表示,还可以用[[...]]表示

字符串在处理数学运算时,会尝试转Number去计算,如果转换不成功就报错

使用(..)来连接字符串

使用#来计算字符串长度,例如:(print(#"hehe")) -- 4

table:table表示一个数组的时候,默认索引是从1开始的

table = {} ==>创建一个空表

table = {"string",true,1,nil} ==>创建表并赋值

访问table表 ==> print(table[1])

修改table表 ==>table[1]=66; print(table[1])

table表表示数组的时候 ==> table.insert(table,"hehe")==>第一个参数为表变量名,第二餐数为插入内容,方法为依次向后找,只要找到一个nil的位置就把内容插入进去

table.insert(table,66,"hehe") ==>第二个参数为插入位置,可以跳越性插入

table.insert(table,2,"hehe") ==> 从第二个位置元素开始,插入,后面元素依次后移

table表表示数组的时候的删除 ==> t = {1,2,"hehe",true} ==> table.remove(t,1) ==>删除指定索引位置元素,后面元素依次前移

table.remove(t) ==> 删除连续索引的最后一个元素

table是一个关联数组,索引可以是数字也可以是字符串

例如:t = {[2] = 10,1,2,3,5,[3]=10,[-1]=20,["hehe"] = "lol",key = "hh",c = {1,3}}

print(t[2])   print(t["hehe"])    print(t.hehe)    print(t["key"])    print(t.key)   print(t.c[2])

添加字符串为索引的元素

t["key1"] = "hh1"  t.key2 = "hehe2"  print(t.key1)   print(t["key2"])   i = "key2"   print(t[d])

Lua运算符

数学运算符: + - * / % ^    (没有自增自减类型的运算符)

关系运算符:==  >=   >   <   <=   ~=(不等于)

逻辑运算符:and or not

条件语句

if a then
 ...
end

------------------------

if a then
...
else
...
end

------------------------

if a then
...
elseif b then       //注意elseif没有空格
...
else
...
end

循环语句

a = 1
while a < 10 do 
...
a = a+1
end


---------------------------------


repeat 
    ...
    a = a+1
until a>10          //until 的条件满足,跳出循环


----------------------------------

for a = 1, 10, 3 do      //for 变量定义,条件,每次循环累加值 do 循环体 end
   ...
end



循环有break关键字跳出,没有continue关键字

局部变量和全局变量

一般情况下,定义的变量都是全局的变量,前面加local关键字就是局部变量 ==> local t = {1,2,3,true,"key" = "value"}

 

Lua 元表(Metatable) 

在lua table中 通过key 来访问 value值 当需要对以table为单位进行操作如+ - 等操作时,就需要涉及到元表的应用

而处理这种表的相加等操作的方法叫做 “元方法”

处理元表:

setmetatable(table,metatable)  ==> 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败

getmetatable(table) ==>返回对象的元表(metatable)

对指定表设置元表:

myTable = {}

myMetatable = {}

setmetatable(myTable,myMetatable)  ==> 把myMetatable设为myTable的元表

getmetatable(myTable) ==>返回myMetatable 

元方法  相当于重写

__index  ==>可以把方法或表数据放入__index中

例如:

t = {1,2}

print(t["hehe"]) --> nil

t = setmetatable({},{__index = {"hehe"=3}})

print(t["hehe"]) --> 3



t = {1,2,3}
func = function(t,key) 
if key = "hehe" then
return "lol"
else return nil
end
end
t = setmetatable({},{__index = func})
print(t.hehe) --> lol

rawset : 防止不断执行__newindex陷入死循环(例:rawset(table,"key","hehe"))

rawget:跳过__index函数,只从原来表中搜索(print(rawget(t,t.key)))

常用元方法还包括

__add\__sub\__mul\__div\__mod\__eq\__It\__le\_call\_tostring

迭代器:

for k,v in pairs(table) do
...
end

------------------------------

for k,v in ipairs(table) do   //顺序输出元素v
...
end

 

你可能感兴趣的:(LUA)