变量
lua中的变量全部是全局变量,变量的默认值为nil
function joke()
c=5 --全局变量
local d=6;--局部变量
end
joke()
print(c,d)--c是5,d是nil
------------------------
do
local a=6;
c=6;
print(a,c)--6 6
end
print(a,c)--6,5
函数可以作为传入参数
function myprint(param)
print("myprint输出的值",param)0
end
function add(num1,num2,someFunction)
result=num1+num2
someFunction(result)
end
add(10,1,myprint)
赋值
1,交换
x,y=y,x
a[i],a[j]=a[j],a[i]
2,合并
变量+空格+..+空格+变量
3,返回值
a,b=f()--函数返回两个值,分别返回给a和b
索引
1,表的索引
t[i]
t.i--当索引为字符串类型时的一种简化写法
gettable_event(t,i)--采用索引访问本质上是一个类似这样的函数调用
循环
Lua中有while,for,repeat,until
在do和end中间写循环体代码
条件语句if,在then后面写执行代码,以end结束
--举例
tab={"java","C++","C","Lua"}
for key,value in ipairs(tab)
do
print(key,value)
end
首先,初始化,计算in后面的表达式的值(ipairs),表达式应该返回泛型for所需要的三个值:
1,迭代函数
2,状态常量
3,控制变量
如果表达式返回的结果个数不足三个,会自动调用nil补足。
第二、将状态常量和控制变量作为参数,调用迭代函数
第三、将迭代函数返回的值赋给变量列表
第四、如果返回的第一个值为nil,循环结束,否则继续执行循环体
第五、回到第二步,再次调用迭代函数
举例:手写一个符合for in要求的表达式:
function iparis1(tab)
return ipairs1_iter,tab,0
end
--第一个是迭代函数,第二个是状态常量
function ipairs_iter(tab,i)
i=i+1;
if tab[i]~=nil then return i,t[i]
end
end
--lua中不等于是~=而不是!=a
for k,v in ipairs1(tab) do
print(k,v)
end
同样可以实现ipairs的功能。ipairs在迭代时,将返回三个参数,第一个是ipairs,第二个是传入的table,第三个是0。每次将table中的值赋值给k和v,在下一次循环中更新k和v的值,直到k和v为nil