lua

来源:互联网 发布:js统计页面刷新次数 编辑:程序博客网 时间:2024/05/02 00:24
Lua是一个小巧的脚本语言。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。[2]  Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。[2]  一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。



-- print("Hello,Lua") --Hello,Lua
-- print("hangsfsfdg") --hangsfsfdg
-- print("idsf");print("sfsfdfg") --idsf  --sfsfdfg
-------------------变量------------------
--Lua中变量无需指定数据类型,根据赋值号右侧数据内容的类型
--类别会自动识别
-- name = 100
--如果值字符串类型可以使用“”,也可以使用‘’
--lua语言中变量可以直接引用
-- print(name) --100
-- print(type(name))--nuamber
--可以这样赋值,定义两个变量可以只赋一个值
-- sex,age = '男',18
-- sex,age = '男'
--gender = 'man',18
-- print(sex,age)

---------------逻辑运算符----------------------------

--lua中逻辑运算符:and  or  not

--nil为false,其他任何值(包括0)都为真
--当and时,两个值都为真时取后一个值
--当or时,两个值都为真时取第一个值
-- isOk = true
-- print(not isOk or 1)--1
-- print(isOk and msg)--nil
-- print(nil and 3)--nil
-- print(4 or 5)--4
-- print(4 and 5)--5
-- print(false or 5)--5
-- print(not 4)--false

------------------三目运算符-------------------
-- a=4
-- b= 5
-- print(a or b) -- 4
-- print(a and b) -- 5

-- isOk?4:5
-- isOk = false
-- print((isOk and a) or b)

-----------------连接运算符-------------------------------

-- print("wangxing".."真的好丑")



-------------------数组------------------数组是一个table类型的
-- table_age = {}   --可以这样定义
-- table_age = {"hello",1,2,3,4,5}--可以存储不同的类型的元素
--数组的长度不用固定
-- print(type(table_age))
--访问数组元素.默认数组的下标是从1开始的,数组越界不会崩溃,会直接打印nil(它也是一种数据类型)
--如果想要下标从0开始----------------给他制定一个值
-- print(table_age[1]) -- hello
-- table_num={1,3,5,7}
-- table_num[0] = 9
-- table_num["aa"] = 8
-- print(table_num[0]) --nil
-- print(table_num["aa"]) --nil
-- print(table_num[1]) --1

--任意类型都可以存储,包括函数
--如果表里面的数据包括普通的数值,又有键值对,使用表名【下标】取得值是表里面的普通数值,会把键值对跳过去,表明[下标]只会读取普通数值
--如果想取键值对,则表名[‘键的名字’]或表名.键名
-- score = {
--      [0] = 34,
--       o = 35,
--      name = "lanou",
--      69,
--      age = 20,
--      89,
--      nil
-- }
-- print(score.name) --lanou
-- print(score['name']) --lanou
-- print(type(score)) --table
-- print(score[0])--34
-- print(score['o'])  
-- print(score[1])--69
-- print(score.name)

-- name = 9
-- tab = {"Lanou",age = 20,60,name}
-- print(tab[0]) --nil
-- print(tab[1]) --lanou
-- print(tab.age) -- 20
-- print(tab[3]) -- 9

-- table相当于数组
-- score = {89,90,78,60}

--table相当于一个字典
-- tab = {name = "LO",age = 20,["mmm"]='jjj',[111]=555}
--表里面的注意事项
--[[
1.所有元素以逗号分开
2.所有索引值都需要用[]扩起来,但是如果是字符串,就可以去掉引号和中括号,如果没有[]括起来,则认为是字符串索引
3.如果不写索引,则索引就会被认为默认为数字索引,并按顺序自动从1开始往后编
4.如果字符串当索引的话,不能直接使用引号,,可以直接使用在[]中添加引号形式
]]
-- print(tab['mmm']) --jjj
-- print(tab[111])--555
-- stuent ={["name"] = "wangxing",30,28,30}
-- tab1 = {[tab]= "table"}
-- print(tab1[tab])

--look = {[temp]= 1,11} --这种情况下会报错table index is nil

-- temp = 2
-- temp1= 2
-- tab = {[temp] = 1,11}
-- temp = 1
-- print(tab[temp])--11
-- print(tab[temp1])

--虽然定义了temp = 2,但是后来改变了temp = 1,所以指向的另外的key

--由上综述
--1.对于字符串,在{}定义时,可以Key = value,也可以[“flag”]= nil,索引都是string类型,对于非nil类型变量(包括字符串),都可以使用[var]= value的方式
--2.使用table时,对于字符串,可以通过.的方式进行访问,也可以通过[]方式访问,对于tab[a]和tab[b],如果a=b,tab[a]访问到tab[b]的内容

-- -------------------------循环-------------------------------
--循环语句1
--[[
for i=起始值,终止值,增量(可忽略) do
     循环体
end
]]
--输出2-10之间的所有偶数
-- for i=2,10,2 do
--      print(i)
-- end

--循环语句2
--while循环体内可以更改循环条件,而for循环不可以
--[[
whie 条件表达式 do
     循环语句
     end
]]

--输出2-10之间的所有偶数
-- i = 2
-- while i<=10 do
-- print(i)
-- i=i+2
-- end
--循环语句3
--[[
     repeat
          循环语句
     until 条件表达式
]]
--输出1-100之间的所有数的和
-- i= 1
-- sum = 0
-- repeat
--      sum = sum+i
--      i=i+1
-- until i>100
--      print(sum)

--如果老王有10000元,每天花一半,多少天可以花完如果剩余数量小于0.01,算花完
--方法1
-- b = 10000
-- c = 0
-- d = 0
-- repeat
--      c = b/2
--      b= b-c
--      d = d+1
-- until b<0.01
-- print(d)

--方法2
-- money = 10000
-- day = 0
-- while money>=0.01 do
--      money = money/2
--      day= day+1
--      print(money)
-- end
-- print(day)

--sum = 1+2+3+.....+N,求sum不超过10000的最大整数值和项值
-- zhi = 0
-- xiangzhi = 0
-- repeat
--      i = i+1
--      zhi = zhi+i

-- until zhi>10000
-- print(zhi-i)
-- print(i-1)

--求1-100内质数的和
-- sum = 0
-- sun = 0
-- for i=3,100,2 do
--      for j=2,i-1,1 do
--           if i%j==0 then
--                sum = i
--           end

--      end
--      sun = sun+sum
-- end

-- print(sun)



-- sum = 0
-- for i=2,100 do
--      t = 0
--      for j=i,2,-1 do
--           if i%j == 0 then
--                t = t+1
--           end
--      end
-- if t==1 then
--      sum = sum+i
-- end
-- end
-- print(sum)
----------遍历数组-----------------
-- arrAges = {1,2,3,4,5}
--表中插入一个元素
-- table.insert(arrAges,2,"nihao")
--表中移除一个元素
-- table.remove(arrAges,4)
-- for i=1,#arrAges do
     -- print(arrAges[i])
-- end
------------通过#表名,可以获取table或者字符串的长度
--获取表名的长度#name或这字符串的长度
-- name = "lanoukeji"
-- print(#name)

--列出参数中指定table的数组部分从Start位置到end位置的所有元素
--这些元素之间以指定的分隔符隔开
-- print(table.concat(arrAges,"*",1,3))

--使用Table来实现冒泡排序
-- SortArr = {20,19,56,9,67}
-- for i=1,#SortArr do
--      for j=1,#SortArr-i do
--           if SortArr[j]>SortArr[j+1] then
--                tem = 0;
--                tem = SortArr[j]
--                SortArr[j] = SortArr[j+1]
--                SortArr[j+1] = tem
--           end
--      end
-- end
-- for i=1,#SortArr do
--      print(SortArr[i])
-- end

--if语法的三种格式
--1.
-- if true then
--      print("苹果")
-- end

--2.
-- if true then
--      print("苹果")
-- else
--      print("香蕉")
-- end

--3.
-- if true then
--      print("苹果")
-- elseif(a==3) then
--      print("香蕉")
-- else
-- print("梨")
-- end




--for i = 1, 10,2 do
--  i = i + 100
--    print(i)
--  end
---101 ,103, 105,107,109
--在lua中一旦循环条件设定,下面对循环变量的更改,不会对结果造成影响(避免这种情况的出现)
--print(#dic)
-- for i,v in pairs(dic) do
-- print(v)
-- end

--练习,求出集合中出现频率最高的元素,并输出
arr = {4,"blue", "blue", "red","blue"}
-- //dic存储数组中出现的元素 = 次数
-- dic = {}
-- for i = 1,#arr do
     s = arr[i]
      print(s)
--      if dic[s] then
--           dic[s] = dic[s] + 1
--      else
--           dic[s] = 1
--      end
-- end

-- for i,v in ipairs(dic) do
--      print(k,v)
-- end


-----------------------------------方法-----------------------------------
--方法可以使用一个变量来接收,这个变量就是方法的名字
-- func = function ()
--      print("This is a funcion")
-- end
-- print(func)
-- func()  

-- sum(4,5)

-- hero = {name = "Dema", hp = 1000}
-- hero.attack = function()
--    print("attack")
-- end
-- hero.attack()


-- hero = {name = 'hero',hp = 1000,attack = function()
--   print("attack")
-- end}


--函数的多重返回值,只需要在return关键字后面
--列出返回值,用逗号隔开,多重返回值需要使用多个
--变量接收
-- function Cal(a,b)
--      return a + b,a - b, a * b, a / b;
-- end
-- w, x,r,t = Cal(2,4);
-- print(w,x,r,t)

-- function func()
-- end

-- function func()--无返回值
-- end

-- function func1( )--有一个返回值
--      return "a"
-- end

-- function func2()--有两个返回值
--      return "a" ,"b"
-- end

-- x,y = func2() --x = "a" y = "b"
-- x = func2()  --x = "a", b会被丢失掉
-- x,y,z =10,func2() -- x = 10, y = "a" , z = "b"


-- x, y =func() -- x= nil y = nil
-- x,y = func1() -- x = "a", y = nil

-- local t = {func()} -- t表示一个空的table
-- local t ={func1()} -- t = {"a"}
-- local t = {func2()} -- t = {"a", "b"}

-- --当多重返回值的函数调用出现在table表中时,在
-- --访问表中元素是只会返回当前函数的第一个返回值
-- local t = {func(), func2,4} --
-- print(t[1])
-- print(t[2])
-- print(t[3])

-- --可以在一个函数中返回另一个函数的返回值
-- function MyFunc(  )
--      --注意:这里如果是返回func2(),表示会返回
--      --func2中所有返回值,如果是(func2()),只会返回一个返回值
--      return func2()
-- end
-- print(MyFunc())

--可变参数类型的函数
-- function ArguementFun(...)
--      for i,v in ipairs{...} do
--           print(v)
--      end
-- end
-- ArguementFun(456,223,334,"aaa")
0 0
原创粉丝点击