lua 学习总结

  1. 下载安装IDE(http://static.runoob.com/download/LuaForWindows_v5.1.4-46.exe)
  2. 第一个Lua程序: HelloWorld.lua
    1. 打开LuaIDE(SciTE),在编辑框中输入print("hello world") 并保存,注单,这里必须保存为*.lua的格式。
    2. 按F5就可以编译支行*.lua的文件了,在控制台可以查看输出内容
  3. 基础语法
    1. 单行注释: --
    2. 多行注释:--[[多行注释]]    或    --[=[多行注释]=]
    3. 变量命名:字母、数字、下划线组成,并不能以数字开头
    4. 数据类型:
      1. nil:取值nil,表示一个无效的值类似于null,在条件表达式中为false
      2. boolean:取值false,true
      3. number:数字类型,双精度类型的实浮点数
      4. string:字符串,""  或 ''  或   [[字符串块]]
      5. function:函数,由C或Lua编写的函数,函数可以保存到指定变量里
      6. table:数组或列表,tab={} 创建了一个空表,下标从1开始,若指定的键的值,则没下标了
      7. thread:线程?
      8. userdata:数据结构?
    5. 变量:
      1. 变量分类
            a = 5                                    --全局变量(默认就是全局变量)
            local b = 10                             --局部变量(用local修饰则是局部变量)
            function test()
                c = 15                               --全局变量(没有local修饰,不论在哪定义都是全局变量)
                local d = 20                         --局部变量(仅在test函数体里有效)
                local a = 50                         --局部变量(在test函数体里a是50,出了test函数体a还是5)
                b = 100                              --全局变量(在test函数体里、外b都等于100)
            end
            print(a,b,c,d)                           -->5,10,nil,nil(没调用test函数前,test体内的操作不生效)
            test()
            print(a,b,c,d)                           -->5,100,15,nil

      2. 可以多变量一起赋值:
            a,b,c = 0,1                              --当变量个数和值个数不一至时,多的变量赋nil,多的值会被忽略
            print(a,b,c)                             -->0,1,nil
            a,b,c =10
            print(a,b,c)                             -->10,nil,nil   (b由1改成了nil)

      3.  多变量赋值一般用来交换变量以及接收函数返回的多值:
            a,b = b,a                                --交换变量(先执行 等号 的右边,再赋值给左边)
            a,b = f()                                --f()第一个返回值给a,第二个返回值给b
      4. 函数体内尽可能用局部变量,有两个好处:1.避免命名冲突,2访问局部变量的速度比访问全局变量快
    6. 循环: while  for   repeat...until
      1. while循环: while (condition) do  ...  end
        a = 10
        while( a < 20 ) do
           print("a 的值为:", a)
           a = a+1
        end

      2. for循环: 
        1. 数值for循环
          exp1 = 1
          exp2 = 10
          exp3 = 2  --步长,可以不指定,默认为1
          
          --for的三个表达式在循环开始前一次性求值,以后不再进行求?
          --即:若exp1,exp2,exp3是函数,则只在循环开时前执行一次
          for i = exp1,exp2,exp3 do  --i从exp1变化到exp2,每次变化以exp3为步长递增i
          	print(i)
          end

        2. 泛型for循环
          tab = {"aaaa","bbbb", key1 = "cccc",key2 = "dddd",nil, "eeee"}
          
          for k,v in pairs(tab) do  --pairs:遍历tab中所有元素,遇到nil会自动忽略
          	print(k .. ":" .. v)
          end
          
          
          for k,v in ipairs(tab) do  --ipairs:仅遍历下标是数字的元素,且遇到nil就会终止循环
          	print(k .. "=" .. v)
          end

      3. repeat....until循环:
        a = 10
        
        repeat			--循环开始先执行一次,再判断条件是否成立
        	print(a)
        	a=a-1
        until(a < 5)  	--满足条件则终止循环

      4. 循环控制语句: break   (lua只有 break:跳出循环)
        tab = {"aaa","bbb","ccc","ddd","eee"}
        
        for k,v in pairs(tab) do
        	if(k > 3) then break end
        	print(k .. ":" .. v)
        end

    7. 流程控制: if (condition) then ... end       if (condition) then ... else ... end      if(condition) then ... elseif(condition) then ... else ... end
      a,b = 10,20
      
      if( a<b ) then
      	print("a < b")
      end
      
      if( a<b ) then
      	print("min is a")
      else
      	print("min is b")
      end
      
      if( a<5 ) then
      	print("不及格")
      elseif( a>=5 and a<8 ) then
      	print("良好")
      else
      	print("优秀")
      end

    8. 函数  function(arg1,...argn)  functionBody  end    在function前还可以用local修饰,来标记函数为局部函数
      --[[ 比较两个数的大小,并返回较大的数]]
      function maxFun(num1,num2)
      	local res = 0
      	if(num1>num2) then
      		res = num1
      	else
      		res = num2
      	end
      	return res
      end
      print("两值中最大值为:" .. maxFun(100,20))
      print("两值中最大值为:" .. maxFun(10,10.5))
      
      
      
      --[[将函数作为参数传递给函数]]
      function printFun(str)
      	print("这是打印函数 : " .. str)
      end
      function addFun(num1,num2,fun)
      	local res = num1 + num2
      	fun(res)
      end
      addFun(12,30,printFun)
      
      
      
      --[[多返回值函数:返回一个数组中最小的值及该值的下标]]
      tab1 = {10,2,45,0.4,8,0.03,200}
      function minFun(tab)
      	local i = 1  		--最小值的下标
      	local min = tab[i] 	--最小值
      	for k,v in ipairs(tab) do
      		if( v<min ) then
      			i = k
      			min = v
      		end
      	end
      	return i,min
      end
      print(minFun(tab1))
      
      
      
      --[[可变参数的函数:求传入参数的下平均值]]
      function avgFun(...)
      	local res =0
      	local arg ={...}
      	for k,v in ipairs(arg) do
      		res = res + v
      	end
      	print("总共有 " .. #arg .. "个参数")
      	return res / #arg
      end
      print("平均值为:" .. avgFun(1,2,34,56,7))

    9. 运算符:算术运算符、关系运算符、逻辑运算符、其他运算符
      1. 算术运算符:+ (加法)、-(减法) 、*(乘法) 、/(除法) 、%(取余)、^(乘幂
      2. 关系运算符:==(等于)、~=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等行)
      3. 逻辑运算符:and(逻辑与)、or(逻辑或)、not(逻辑非)
      4. 其他运算符:..(连接两个字符串,在lua里面+不能用作字符连接)、#(一元运算符,返回字符串或数组长度)
        str = "aabbccd"
        tab = {k3="aa" , "bb" , nil , "cc" , k1="dd" , k2="ee"}
        print(#str)		--7
        print(#tab)		--3,针对表,#只计算下标为数字的元素个数
        
        
        print("hello" .. " " .. "world")	--hello world
        print("hello" + " " + "world")		--报错

      5. 运算符优先级:
        --[[
        	从高到低的顺序:
        	^
        	not    - (unary)
        	*      /
        	+      -
        	..
        	<      >      <=     >=     ~=     ==
        	and
        	or
        ]]
        
        
        --[[
        	除了^和..外所有的二元运算符都是左连接的。
        	a+i < b/2+1          <-->       (a+i) < ((b/2)+1)
        	5+x^2*8              <-->       5+((x^2)*8)
        	a < y and y <= z     <-->       (a < y) and (y <= z)
        	-x^2                 <-->       -(x^2)
        	x^y^z                <-->       x^(y^z)
        ]]

      
      
   

    
      
      
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值