zoukankan      html  css  js  c++  java
  • lua_の_进阶总结之基础篇

    接触lua有一段时间了,但总觉得编程能力上不去,最近在一边回顾,一边看别人总结的博客,于是整理了一下。只记一些认为需要记录的,最好的学习方式还是看书。此处多谢网络分享的朋友。

    【21个关键字】

    and  break  do  else  else if  end   false   for   function   if 

    in   local   nil   not   orrepeat   return   then   true   until    while 

    【8种基础类型】

    nil: 空  (可以用来删除一个元素)
    boolean: 布尔
    number: 数字
    string: 字符串
    function: 函数
    table: 表
    userdata: 定义数据类型
    thread: 线程 

    【type】用函数type来检测一个变量的类型。

    如类型测试:
    print(type(var)) 

    var = 20   print(type(var)) 

    var = "Hello world"   print(type(var))

    var = print   print(type(var)) 

    var = {}   print(type(var))

    【string类型】

      [[]]来处理转义定义字符串,括号中间可以加 若干个"="号,如 [==[ ... ]==]

    下面的语句所表 的是完全相同的字符串:
    a = 'alo 123"'
    a = "alo 123""
    a = '97lo104923"' 

    a = [[alo
    123"]] 

    a = [==[
    alo 
    123"]==]

    【连字符】

      需要连接两个字符串用连接操作符".."( 类似C语言中的strcat )

    eg: print("hello".."world")

    【取长度】

      "#"获取字符串的长度。

    eg:  a = "hello world"

           print(#a)

    或string库函数
    a = "Hello world" print(string.len(a))    (貌似这个函数最新版本的lua不再支持了)

    【table = 数组+映射】

    1)数组

    ①a = {}

    a[1]=1

    a[2]=5

    a[3]="hello"

    print(a[1],a[2],a[3])

    ②a = {1,5,"hello"}

    print(a[1],a[2],a[3])

    这两种定义方式效果一样。

    2)映射

    类似于C语言中的map,[]里面的是key值。(数据库的table)

    ①a= {}

    a["hello"]=2

    a[3]=false

    print(a.hello,a[3])

    ②a={["hello"]=2,[3]=false}

    print(a.hello,a[3])

    这两种定义方式效果一样。

    【逻辑运算符】

      and(与)   or(或)   not(非 )

    【局部变量】

    i = 10           -- 全局变量
    local j = i      -- 局部变量

    【控制语句】

    1)if...then...else   如:

    if a>b then  

    else if a>c then  

    else  

    end 

    lua中不支持switch语句,条件判断只有if语句。

    2)while   如:

    while a<5 do  

        a = a + 1  

    end  

    3)repeat...until

      Lua中的repeat语句类似于C语言中的do...while语句,先执行一次再判断条件是否满足。

    local i = 0  

    repeat  

         i = i + 1  

         print(i..", ")  

    until i>3  

    --输出为1,2,3,4  

    【迭代循环】

    ①数字for循环

      for var  = from,end,step do  

           loop-part  

      end  

    表示从from到end,每次递增step。step参数如果不设置的话默认为1。

    注:for循环的参数为表达式或者函数调用时,只会调用一次

    eg:倒序输出整数10到1。

    for i=10,1,-1 do  

        print(i)  

    end

    ②泛型for循环,类似于C++中的迭代器(iterator) 

    io.lines用于遍历每行; pairs迭代table元素; ipairs用于迭代数组元素; string.gmatch用于迭代字符串中的单词。

    days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}  

    for k,v in pairs(days) do   

           print(v)  

    end 

    pairs遍历的结果是散列的,随机的。

    a = {  

        ["foo"] = 1,  

        [100] = true,  

        [1] = 20,  

        [2] = 30,  

    }  

    for k,v in ipairs(a) do  

        print(k,v)   

    end

    编译结果为:1   20

                     2   30

    原因:ipairs只遍历数组,pairs遍历数组+映射。

    5)控制语句break与return

       break 用于退出当前循环(for, repeat, while)   ——循环外不可使 

    return 用来从函数返回结果,当一个函数自然结束,尾部会有 个默认的return。

    tip: Lua要求break和return只能出现在block的结尾句

    【函数】

    函数的目的:封装、抽象 

    封装是为了隐藏细节 
    抽象是为了便于理解和重复使用

    1) 函数定义方法

    function func()  

    end 

    func = function()  end  --注意:end不可以另起一行  

          以上两种函数定义方法效果一样

    2)在Lua语言中函数可以当做一个值赋给变量。

    add = function(a,b)  --把函数赋给add  

        return a+b  

    end  

    foo = add   --把函数赋给foo  

    print(foo(1,5)) 

    Lua的多返回值

    function add(a,b)    

        return a+b,a-b  

    end  

    print(add(1,5))   -->结果为6   -4  

    多变量赋值

    a,b = 1,2  

    a,b = b,a  

    print(a, b)  -->2,1  

    3)函数的参数

    Lua中函数的参数可以有任意多个。
    当给函数传递参数时超过了函数定义的形参个数,那么多余的参数会被丢弃。

    function sum (a, b)   

        return a + b  

    end  

    print(sum(10, 20, 30))    ——结果为30,自动把多余的参数30丢弃

    传入的参数形参少,那么缺少的形参的值默认为nil

    function sum (a, b)   

       return a + b  

    end  

    print(sum(10))           ——结果为0,相当于10+nil=10  

    4)可变参数

    function add( ... )  

        local  s = 0   

        for i,v in ipairs{...} do  

            s = s + v   

        end  

        return s  

    end  

    print(add (1,2,3,4,5))   --运行结果为15  

    5)闭包函数

     闭包函数是指将一个函数写在另一个函数之内,内部函数可以访问外部函数的局部变量。内部函数没有名称,通常也叫匿名函数。

    function newCounter()   

        local i = 0  

        return function()   

                i=i+1  

                return i  

            end  

    end  

    c1 = newCounter()   

    print(c1())    --> 1   

    print(c1())    --> 2  


     微信搜索【水勺子】关注我,获取更多详细信息

  • 相关阅读:
    MySQL中TIMESTAMP和DATETIME区别
    图片标签的alt与title区别
    DEDE自带的采集功能,标题太短的解决方法
    Modernizr——为HTML5和CSS3而生!
    InnoDB,MyISAM,Memory区别
    Innodb,MyIsam,聚集索引和非聚集索引
    聚集索引与非聚集索引的总结
    程序kill -9与kill -15的区别,以及回调函数的作用
    linux 信号 SIGINT SIGTERM SIGKILL区别
    oracle mysql sqlserver 查看当前所有数据库及数据库基本操作命令
  • 原文地址:https://www.cnblogs.com/xiand/p/6740178.html
Copyright © 2011-2022 走看看