需要解决的问题
lua的闭包lua的面向对象lua数组遍历
VS Code调试lua
下载lua+配置环境+Ctrl+F5
遇到的问题
有很多个a,b,c,但是却不冲突
lua语法
#!/usr/local/bin/lua
print("Hello world!")
print("www.shizukuu.com")
--注释
--全局变量
b
=10
print(b
)
--想删除一个全局变量,只需要将变量赋值为nil。
b
=nil
print(b
)
--Lua 动态类型语言
/变量不要类型定义
/只需要赋值
/值可以存储在变量中,作为参数传递或结果返回
--8个基本类型
--nil、boolean、number、
string、userdata、function、thread、table
print(type("Hello world!"))
print(type(10.4*3))
print(type(print
))
print(type(type
))
print(type(true))
print(type(nil
))
print(type(type(X
)))
--Lua 变量:全局变量、局部变量、表中的域。
a
=5
local b
=5
function
joke()
c
=5
local d
=6
end
joke()
print(c
,d
)
do
local a
=6
b
=6
print(a
,b
);
end
print(a
,b
)
--赋值
a
,b
=10,2
--交换变量值
--x
,y
=y
,x
--a
[i
],a
[j
]=a
[j
],a
[i
]
a
,b
,c
=0,1
print(a
,b
,c
)
a
,b
=a
+1,b
+1,b
+2
print(a
,b
)
a
,b
,c
=0
print(a
,b
,c
)
--[ 0 为
true ]
if(0)
then
print("0为true")
end
--lua 循环
--while
a
=10
while(a
<13)
do
print("a的值为:",a
)
a
=a
+1
end
--for
--只在循环开始前执行一次
function
f(x
)
print("function")
return x
*2
end
--意思是从
1到
10
for i
=1,f(5) do
print(i
)
end
--泛型
for循环
days
={"Sunday","Monday","Tuesday","Wednesday"}
for i
,v
in ipairs(days
) do
print(v
)
end
--repeat until
a
=10
repeat
print("a的值为:",a
)
a
=a
+1
until(a
>13)
--循环嵌套
--TODO
:
j
=2
for i
=2,10 do
for j
=2,(i
/j
),2 do
if(not(i
%j
))
then
break
end
if(j
>(i
/j
))then
print("i的值为:",i
)
end
end
end
--lua 流程控制
--if
a
=10
if(a
<20)
then
print("a小于20");
end
print("a的值为:",a
)
--elseif
a
=100
if(a
==10)
then
print("a的值为10")
elseif(a
==20)
then
print("a的值为20")
else
print("没有匹配a的值")
end
print("a的真实值为:",a
)
a
=100
b
=200
if(a
==100)
then
if(b
==200)
then
print("a的值为100,b的值为200")
end
end
函数
--函数
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))
myprint
=function(param
)
print("这是打印函数 - ##",param
,"##")
end
function
add(num1
,num2
,functionPrint
)
result
=num1
+num2
functionPrint(result
)
end
myprint(10)
add(2,5,myprint
)
--多返回值
function
maximum(a
)
local mi
=1
local m
=a
[mi
]
for i
,val
in ipairs(a
) do
if val
>m then
mi
=i
m
=val
end
end
return m
,mi
end
print(maximum({8,10,23,12,5}))
--可变参数
--在函数参数列表中使用三点
... 表示函数有可变的参数
function
add(...)
local s
=0
for i
,v
in ipairs
{...}do
s
=s
+v
end
return s
end
print(add(3,4,5,6,7))
function
average(...)
result
=0
local arg
={...}
for i
,v
in ipairs(arg
) do
result
=result
+v
end
print("总共传入"..#arg
.."个数")
return result
/#arg
end
print("平均值为",average(10,5,3,4,5,6))
function
average(...)
result
=0
local arg
={...}
for i
,v
in ipairs(arg
) do
result
= result
+v
end
print("总共传入"..select("#",...).."个数")
return result
/select("#",...)
end
print("平均值为",average(10,5,3,4,5,6))
运算符
--运算符
a
=21
b
=10
c
=a
+b
print("Line 1-c 的值为",c
)
c
=a
-b
print(c
)
c
=a
*b
print(c
)
c
=a
/b
print(c
)
c
=a
%b
print(c
)
c
=a
^2
print(c
)
c
=-a
print(c
)
a
=21
b
=10
if(a
==b
)
then
print("a等于b")
else
print("a不等于b")
end
if(a
~=b
)
then
print("a不等于b")
else
print("a等于b")
end
逻辑运算符
--逻辑运算符
a
=false
b
=true
if(a and b
)
then
print("a and b - 条件为true")
else
print("a and b - 条件为false")
end
if(not(a and b
))
then
print("not(a and b) - 条件为true ")
else
print("not(a and b) - 条件为false ")
end
其他运算符
-- .. #
a
="Hello "
b
="World"
print("连接字符串a和b",a
..b
)
print("b字符串长度 ",#b
)
print("字符串Test长度",#
"Test")
print("网址长度",#
"www.baidu.com")
转义字符
字符串操作
字符串截取
--字符串截取
string.sub()
--[[string.sub(s
, i
[, j
])
s:要截取的字符串。
i:截取开始位置。
j:截取结束位置,默认为
-1,最后一个字符。
]]
local sourcestr
= "prefix--runoobgoogletaobao--suffix"
print("\n原始字符串",string.format("%q",sourcestr
))
local first_sub
=string.sub(sourcestr
,4,15)
print("\n第一次截取",string.format("%q",first_sub
))
--截取最后
10个
local third_sub
= string.sub(sourcestr
,-10)
print("\n第三次截取",string.format("%q",third_sub
))
字符串大小写转换
--字符串大小写转换
string1
="Lua";
print(string.upper(string1
))
print(string.lower(string1
))
字符串查找与反转
--字符串查找与反转
string="Lua Tutorial"
print(string.find(string,"Tutorial"))
reversedString
=string.reverse(string)
print("新字符串为",reversedString
)
格式字符串
--字符串格式化
--string.format() 函数生成具有特定格式的字符串
--函数的第一个参数是格式
, 之后是对应格式中每个代号的各种数据
string1
="Lua"
string2
="Tutorial"
number1
=10
number2
=20
print(string.format("基本格式化 %s %s",string1
,string2
))
date
=2;month
=1;year
=2014
print(string.format("日期格式化 d/d/d",date
,month
,year
))
print(string.format("%.4f",1/3))
字符与整数相互转换
--字符与整数相互转换
--string.byte
--string.char
print(string.byte("Lua"))
print(string.byte("Lua",3))
print(string.byte("Lua",-1))
print(string.byte("Lua",2))
print(string.char(97))
字符串长度
--字符串长度
--string.len
string2
="Shizukuu"
print("字符串长度",string.len(string2
))
字符串复制2次
--字符串复制
2次
repeatedString
=string.rep(string2
,2)
print(repeatedString
)
Lua 数组
数组从1开始
--Lua 数组
--一维数组
array
={"Lua","Tutorial"}
for i
=0,2 do
print(array
[i
])
end
以负数为数组索引值
--以负数为数组索引值
array
={}
for i
=-2,2 do
array
[i
]=i
*2
end
for i
=-2,2 do
print(array
[i
])
end
多维数组
array
={}
for i
=1,3 do
array
[i
]={}
for j
=1,3 do
array
[i
][j
]=i
*j
end
end
for i
=1,3 do
for j
=1,3 do
print(array
[i
][j
])
end
end