Lua基础知识(一)
--记录每一天,日常一更
一.数据类型 type()函数可以来确定变量类型
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
1.nil空,表示无效值
2.boolean(布尔类型)Lua中nil和false都为假,其余都为真
3.number表示实数 math.floor向下取整,math.ceil向上取整
4.string 字符串类型
定义字符串三种方式:
1. local string1 = 'helloworld'
2. local string2 = "helloworld"
3. local string3 = [["helloworld"]]--
4. local string4 = [=[helloworld]=] 中间可任意字符* ,字符串链接方法 ..
print("李".."先生")
5.Table 实现了一种抽象的关联数组,"关联数组"是一种具有特殊索引方式的数组,索引可以是除table以外的任意类型的值.table实现通常为一个哈希表,一个数组,或者两者混用
例:
local index ={web = "www.baidu.com",telephone = "123456",123456,nihao={"zhong","guo"},"haha"="hehe"}
print(index.www)
print(index.web)
print(index.telephone)
print(index[3])
print(index.nihao)
print(index.haha)
6.function函数,也是一种数据类型,函数可以存储在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值
例:local function A ()
local x = 1
local y = 2
return x+y
end
local B = Aprint(B())
二.运算符
1.算数表达式-- +,-,*,/ 加减乘除, % 取余,^2 指数--
2.关系运算符-- >,>=,<,<=,==和其他语言一样,~=表示 不等于--
3.逻辑运算符-- and 与 ,or或 ,not非
逻辑短路
例如and运算如果第一个操作数为假就返回第一个操作数,如果为真第二个不管真假都返回第二个操作数-- 这里的返回值是返回固定的值.
可以用这个特性来模拟C# 中的三目运算符
例:求出a,b中最大的值 (b不为nil或false)
max = (a>b)?a:b
a= 18
b= 11
max =(a>b) and a or b
print(max)
三. 条件,循环结构
lua没有+=,-=,++,-- 都可以用break跳出循环
1.if-else
elseif 的情况下else if 中间空格隔开 每一个if对应一个end
例:
i=5
if i>100 thenprint ("i>100")
else if i>10 thenprint("10=99
print(sum)
2.for循环
for var = beginNum,EndNum,step do
body
end
-- beginNum 开始值
-- EndNum 结束值
-- step 每次递增的大小
sum =0
index = 0
for i=10 ,1, -2 do
sum = sum+i
if sum>20 then
index = i
break
end
end
print("sum大于20时i的值为"..index)
3.while 循环
当表达式为假(nil或者false)时结束循环,也可以使用break语言提前跳出循环
while 表达式 do
body
end
--例:
x=1
sum =0
while(x<100) do
sum = sum+x
x = x+1
end
print(sum)
4.repeat-until 相当于do - while ,直到until为真时结束循环
x=0
sum = 0
repeat
x=x+1
sum = sum+x
until x>=99
print(sum)
5.迭代 pairs 和 ipairs 类似 foreach
pairs: k,v 表示键值对,一个key对应一个value,可以返回Table中的所有键值对,遍历的结构是散列的随机的
ipairs: i,v类似数组的索引和内容,只能遍历到第一个索引不为整数的索引便结束遍历(数组+映射)
for i,v in ipairs(t) do body end
for k,v in pairs(t) do body end
例:
local TextOne={1,2,3,5,8,'what',9,10}
local TextTwo = {
10,
30,
a='nihao',
b=10,
c="abc",
TextThree={1,2,3},
}
for k,v in pairs(TextTwo) do
print("key"..k,"value:"..v)
print(v)
print("aa"..k)
print(k, v) -- k 和 v之间不能添加"," 空格 以外的东西
end
for i,v in ipairs(TextTwo) do
print(TextOne[i])
print ("i:"..i,"v:"..v)
end
四.变量
Lua变量不用定义数据类型,如果要获取变量的数据类型,可以用type()
不用local修饰的为全局变量
用local修饰的为局部变量
a ="1235468"
b =12
c = true
print(type(a))
print(type(b))
print(type(c))
五.函数
函数的目的:封装,抽象
封装是为了隐藏细节
抽象是为了便于理解和重复使用
1. 定义函数
-- function func()
--body
end
-- 2. func = function() end --注:end不能换行
2.Lua中的函数可以当做一个值赋值给变量
add = function(a,b)
return a+b
end
NewAdd = add
print(NewAdd(10,20))
3.Lua的多返回值
function add(a,b)
return a+b,a-b,a*b,a/b
end
print(add(1,6))
4.多变量赋值
-- x,y = 2,3
-- x,y = y,x
-- print(x,y)
5.函数的参数的传递
参数可以有任意多个,当给函数传递的参数超过了函数定义的形参个数,多余的参数会被抛弃
function sum(a,b)
return a+b
end
print(sum(5,6,7)) --7自动舍去
可变参数 ...表示传入的参数,#表示获取数组的长度(中间没有false或nil断开的连续数组)
l=0
function add( ... )
local c = 0
local s = {...}
for k,v in pairs(s) do
c = c+v
end
l = #s
return c
end
print(add(1,2,3,5,6,8,6,9),l)
6.闭合函数(匿名函数)
当一个函数写在另一个函数体内部,这个函数必须是匿名的
这个内部函数可以访问外部函数的局部变量,这个被访问的局部变量既不是全局也不是局部,
被称为非局部变量
function OutFun()
local c = 1
return function ()
c = c+10
return c
end
end
n= OutFun()
print(n())
网友评论