lua基础

作者: Nemonameless | 来源:发表于2017-03-30 10:16 被阅读10次

    fact阶乘

    local function fact(n)
      if n==0 then
        return 1;
      else  
        return n*fact(n-1)
      end
    end
    
      print("input a num:")
      a=io.read("*num")
      print(fact(a))
    

    for循环

    --[[
    local i=0
    while i*i<100000 do
      i=i+1
    end 
    print(i.." * "..i.." = "..i*i)
    ]]--
    local num={1,2,3,4,5,4,3,2,1}
    for i,v in ipairs(num) do
      if i==3 then
        break
      end
      print(i..":"..v)
     end
    

    table

    stu1={id="100",name="Tony",age=20}
    --[[
    print("stu id:"..stu1["id"])
    print("stu name:"..stu1["name"])
    print("stu age:"..stu1["age"])
    
    print("stu id:"..stu1.id)
    print("stu name:"..stu1.name)
    print("stu age:"..stu1.age)
    
    
    for k,v in pairs(stu1) do
      print(k.. ":" ..v)
    end
    --]]
    
    local stulist={"张三","李四","王五","哈啊"}
    print("---------1-----------")
    for i,v in ipairs(stulist) do
      print(i..":"..v)
    end
    
    print("---------2-----------")
    for k,v in pairs(stulist) do
      print(k..":"..v)
    end
    
    print("---------3-----------")
    for i=1,#stulist do             --#stulist
      print(i..":"..stulist[i])
    end
    

    闭包

    function calcultor(opr,a,b)
        function add(a,b)
            return a+b
        end
        
        function sub(a,b)
            return a-b
        end
        
        local result
        if opr=="+" then
           result=add(a,b)
      else
          result=sub(a,b)
      end
      return result
    end
    
    local res=calcultor("+",10,5)
    print("10+5="..res)
    print("--------------")
    
    
    
    function rectangleArea(h,w)
        return h*w
    end
    
    function traiangleArea(b,w)
      return 0.5*b*w
    end
    
    --function getArea(type)
    --  local returnfunc
    --  if type=="rect" then
    --     return rectangleArea
    --   else
    --     return traiangleArea
    --  end
    --  return returnfunc
    --end
    
    function getArea(type)
        local returnfunc
           if type=="rect" then
               returnfunc= function(h,w)
               return h*w
             end
           else
               returnfunc= function(b,w)
             return 0.5*b*w
           end
           end
        return returnfunc
    end
    
    local area=getArea("tria")
    print("area=:"..area(10,15))  --rectangleArea(10,15)也可
    

    Student={id=100,name="Tony"}
    
    function Student:toString()
      local s = "Name:"..self.name..",id:"..self.id
      return s
    end
    
    function Student:create(o)
        o = o or {}
        setmetatable(o,self)
        self.__index=self
        return o
    end
    
    stu1=Student:create({id=200,name="Tom"})
    print(stu1:toString())
    

    UnPack

    这篇文章主要介绍了Lua UnPack函数用法实例,unpack它接受一个数组(table)作为参数,并默认从下标1开始返回数组的所有元素。

    local info={1,2,3,4,5,6}
    local a,b,c,d,e,f=unpack(info)
    print(a,b,c,d,e,f)
    输出结果:1   2   3   4   5   6
    

    如果遇到数组下有nil,或者有字母key的时候

    local info={1,2,3,nil,5,p=6}
    local a,b,c,d,e,f=unpack(info)
    print(a,b,c,d,e,f)
    输出结果:1   2   3   nil    5   nil
    

    ipairs�的遍历是连续的,一旦遇到不连续的就退出,且对非整数key不能输出(即无视table下的所有非整数key)
    pairs的遍历是没顺序,随机的,跟key的哈希值有点关系

    总结论:

    pairs会遍历table的所有键值。
    ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。

    相关文章

      网友评论

          本文标题:lua基础

          本文链接:https://www.haomeiwen.com/subject/ydyuottx.html