lua语法
1.lua数据类型
lua 脚本输出乱码,将lua脚本改为UTF-8编码,并且需要DOS下修改代码页:CHCP 65001 即可。
基本语法
注释
print("script lua win")
-- 单行注释
--[[
多行注释
]]--
标识符
类似于:java当中 变量、属性名、方法名。
以字母(a-z,A-Z)、下划线 开头,后面加上0个或多个 字母、下划线、数字。
不要用下划线+大写字母。
保留字。
总结一点:按照正常思维命名即可。
全局变量
print(a) -- nil
a=1
print(a)
a=nil --销毁a
print(a)
- nil
没有任何有效值,就是一个 nil。 可以用于删除
print("---delete---")
-- 定义一个table
myTab = {key1="value1",key2="value2"}
for k,v in pairs(myTab) do
print(k.."_"..v)
end
print("---after delete---")
myTab.key1=nil
for k,v in pairs(myTab) do
print(k.."_"..v)
end
print("---判断是否为nil")
print(x) -- nil
print((type(x)==nil)) -- false
print(type(x)=='nil') -- true
- boolean
lua会将false(false\nil) 看做是false, 其他的都看做是 true(其他都为true,包括0)
print("---boolean---")
print(type(true)) -- boolean
print(type(false)) -- boolean
print(type(nil)) -- nil
if false or nil then
print("nil被当为true")
else
print("nil为false") -- false
end
print("---测试0---")
if 0 then
print("0 是true") -- true
else
print("0 是false")
end
- number
双精度(8个字节)。
print("---------测试number-------------")
a = 10
print(type(a))
- String
字符串用单引号或双引号来表示。
print("双引号字符串")
print("单引号字符串")
用 [[可以换行的字符串 ]]
i = [[
我是中国人,
我爱我的祖国!
]]
print(i)
字符串和数字进行数学运算,优先将 字符串 转 成 数字。
print("1" + 2) -- 3
print("1" + "2") -- 3
print("1+2") -- 1+2
-- 非数字的字符串和数字进行计算,则会报错-- lua: string.lua:1: attempt to perform arithmetic on a string value
print("error"+1)
字符串连接
-- error1
print("error"..1)
计算字符串长度(#字符串)
testLenth = "abcde"
print("testLenth的长度为:"..#testLenth)
- table
类比成java当中:数组,map,链表,队列等。
table的key的索引,从1开始。
print("---------测试 table-------------")
tab1 = {}
tab2 = {"a","b","c"}
tab3 = {key1="value1", key2 = "value2"}
print("tab3-:")
for k,v in pairs(tab3) do
print(k.."="..v)
end
print("tab3:")
tab1["a_key"]="a_value"
for k,v in pairs(tab1) do
print(k.."="..v)
end
for k,v in pairs(tab2) do
print(k.."="..v)
end
-- table的key的索引,从1开始。
-- 1=a
-- 2=b
-- 3=c
-- 删除table中的元素
print("tab3-:")
tab3["key2"] = nil
for k,v in pairs(tab3) do
print(k.."="..v)
end
print("tab3:")
- function
阶乘:
function factorial(n)
if n == 0 then
return 1
else
return n * factorial(n - 1)
end
end
testFac = factorial
print("6的阶乘结果:"..testFac(6))
匿名函数
print("------------匿名function-------------")
-- 定义函数
function testPrint(tab, func)
for k,v in pairs(tab) do
print(func(k,v))
end
end
-- 定义数组调用函数
tab1 = {"a","b","c"}
testPrint(tab1,
function(k,v)
return k.."="..v
end
)
2.变量赋值
a = 变量值。
print("---变量赋值---")
a,b=1,2
a = 1+2
print(a,b) -- 3 2
常用:x , y = y, x
a,b,c=1,2
print(a,b,c) -- 1 2 nil
变量个数 > 值的个数:按照变量的个数 补足 nil。
a,b,c = 1,2,3,4
print(a,b,c) -- 1 2 3
变量个数<值的个数:多余的值会被忽略。
a,b = 1,2
function var()
a = nil
b = 3
local c = 4
print(c) -- 4
return a,b
end
a,b = var()
print(a,b,c) -- nil 3 nil
多变量赋值:还可以用于函数的返回, 参数值互换。
a,b = func();
需要赋值给变量,如果能用局部变量,尽量用局部变量。
3.索引
对table中元素的访问。
tab[“key”]
tab.key
print("-----------索引--------------")
tab = {key1 = "中国",key2 = "美国"}
print(tab["key1"]) -- 中国
print(tab.key2) --美国
4.循环
用途:做一些有规律的重复操作。
循环体:一组被重复执行的语句。循环条件:判断能否继续循环。
while循环
while(循环条件)
do
业务代码;
对循环条件的控制;
end
a = 1
while(a<5)
do
print(a)
a = a+1
end
for循环
数值for循环:
for var=exp1,exp2,exp3 do
循环体
end
var的值,从exp1一直到exp2,步长是exp3(是可选的,默认是1)
print("----for----")
for i=1,10,2 do
print(i) -- 1 3 5 7 9
end
exp1,exp2,exp3 只在循环开始前计算一次。
print("----for----")
for i=1,test(2) do
print(i) -- 1 2 3 4
end
泛型for循环:
是通过迭代器进行的。
a = {"one","two","three"}
for k,v in pairs(a) do
print(v)
end
repeat until
repeat
循环体
until(条件)
先执行循环体,直到满足条件。如果条件为false,继续执行循环体,如果条件为true,则跳出循
环。
a = 1
repeat
a = a+1
print(a)
until(a>5)
print(a)--6
5.流程控制
if()
print("-----------if-------------")
a = 1
if(a == 1) then
print(a.."是1")
end
0 是 true。
6.函数
print()
功能:1。完成指定的任务。2。计算并返回值(可以返回多个值)。
函数的范围(local ,缺省) function 函数名称(参数列表)
函数体;
return 结果
end
定义一个函数:实现求两个数的最大值。
print("---------------函数定义:求最大值---------------")
function testMax(num1,num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
print("15,20中的最大值是:"..testMax(15,20)) -- 20
函数可以作为参数进行传递。
例子:自定义打印函数。
print("---------------函数定义:自定义打印函数---------------")
myPrint = function(p)
print("重新的打印函数:",p)
end;
myPrint("test");
function add(num1,num2,myPrintParam)
result = num1 + num2;
myPrintParam(result);
end
add(2,3,myPrint)