第二篇:Lua基础语法,以及实例讲解

1:注释
单行注释 -- 相当于 //
多行注释 --[[  ]]  相当于 /*  */

2:基础知识
 2.1 语句之间可以使用 ";" 或者空白隔开(多个语句如果写在同一行的话用分号隔开)
 2.2 string 的连接使用 ..  相当于 + ; string的声明使用 双引号或者单引号括起来
 2.3 流程控制
     条件控制:if 条件 thenelseif 条件 thenelseend
   While循环:while 条件 doend
   Repeat循环:repeatuntil 条件
   For循环:for 变量 = 初值,终点值,步进 doend
   For循环:for 变量1,变量2,… ,变量N in表或枚举函数 doend --下一篇文章后面参考for循环详解  
 2.4 语句块使用 do  end  相当于 { }
 2.5 可以支持同时多赋值语句 a, b, c, d = 1, 2, 3, 4
 2.6 变量默认为全局变量,定于局部变量使用local 关键字
 2.7 数值运算符 支持乘方运算符号 ^   例如:2^3 = 8
 2.8 比较运算符 ~= 相当于 !=
 2.9 逻辑运算符
        and, or, not
    其中,andor 与C语言区别特别大。
    在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
    and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
    a and b:如果a为false,则返回a;否则返回b
    a or b:如果 a 为true,则返回a;否则返回b

    举几个例子:
     print(4 and 5) --> 5
     print(nil and 13) --> nil
     print(false and 13) --> false
     print(4 or 5) --> 4
     print(false or 5) --> 5

    在Lua中这是很有用的特性,也是比较令人混洧的特性。
    我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
    最有用的语句是: x = x or v,它相当于:if not x then x = v end3.0 关键字
      and break do else elseif
     end false for function if
     in local nil not or
     repeat return then true until while
  3.1 变量类型
     怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。Lua支持的类型有以下几种:

     Nil 空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。
     Boolean 布尔值
     Number 数值,在Lua里,数值相当于C语言的double
     String 字符串,如果你愿意的话,字符串是可以包含'\0'字符的
     Table 关系表类型,这个类型功能比较强大,我们在后面慢慢说。
     Function 函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。
     Userdata 嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。
     Thread   线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。如果感兴趣的话,可以去看看Lua的文档。

三:表类型 Table
     3.1 可以使用任意的类型来作为数组的索引 除了nil
     3.2 可以使用任意的类型来作为数组的索引 除了nil
     3.3 所有的元素使用 , 隔开
     3.4 所有索引值都需要使用 [] 括起来,如果是中字符串可以去掉引号和中括号
     3.5 如果不写索引,则会被认为是数字序,并自动加1
     
     使用表之前必须先定义
     T1 = {}
     T1[1] = 10
     T1["john"] = {Age = 27, Gender = "Male"}  
     也可以这样 T1["john"] = {} ; T1["john"]["Age"] = 27;  T1["john"]["Gender"] = "Male"; 
     
     整个表还可以这样定义
     T1
     {
        10,  -- 相当于[1] = 10
        john
        {
           age = 27,
           Gender = "Male"
        },
        20   -- 相当于[2] = 20
     }
     
     例子:
     T1 = 
        {
           10,
           John = 
           {
              name = "hello",
              age = 10,
              birthday = '2000-10-10'
           },
           30
        }

        function printTable(table)
           if (table~=nil) then
            for key, var in ipairs(table) do
                print(key.." , " .. var)
            end
            end
            
            for key2, var2 in pairs(table) do
              if type(var2) == 'table' then
                  printTable(var2)
              else
                print(key2.." , " .. var2)
                end
              end
        end

        printTable(T1)

四:方法 Function
    4.1:方法也是一个变量,可以支持任意参数使用...来定义
          比如 function sum(a, b,...)
         --可变参数的打印方式1
        function sum(a,b,...)
            print(a..','..b)
            for var = 1, arg.n do
                print(arg[var])
            end
        end

        --可变参数的打印方式2
        function sum2(a,b,...)
          print(a..','..b)
          for index=1,select("#", ...) do
            local temp = select(index, ...)
            print(temp)
          end
        end

        sum2(1,2,3,5,'c')
        
    4.2方法支持多个返回值
    --方法支持多个返回值
    function returnPara(a,b,...)
        return a,b,..., a+b+...
    end
    print(returnPara(1,2,3,4)
    --打印如下1    2    3    6
        
   

  

 

posted @ 2014-08-07 11:50  p_towin  阅读(571)  评论(0编辑  收藏  举报