• Lua初学习 9-12 基础


    1:string 转 number :tonumber(string)

    2: number 转 string :tostring(number)

    3:string API:

           Lua中的字符串是不可变值,a = "cocotang"  string.gsub(a,"c","z")  print(a) ----> cocotang

            1获得字符串长度:string.len(string)  或者 #string

            2拼接2个字符串: string..string     &&    如果是2个number number .. number(空格不然误认为小数点)

            3截取字符串,组成新的字符串:string.gsub(a,"cc","zz",index) a字符串中的 cc 由 zz 代替 直到index位置

            4查找字符串中的某字符串位置:string.find(a,"coco") 返回2个值 c 的index 与 o的index

    4:io.read() 获取控制台输入

    5: Table创建一个List(数组)

               a={}

               1:当key 赋值1-10时,len = 10

               2:当key 赋值0-10时,len = 10 (同上)

              Lua中通常用 1 来做 Index的初始值  (table.maxn(a))--->返回最大正索引 Index

    6:取精度 

         x = 3.123456 print(x-x%0.001)   ---->3.123

         x%1 结果是 x的小数部分 0.123456

         x-x%1 结果是 x的整数部分 3   

         x-x%0.001 结果是 x取小数点后三位

    7:运算符

         > < == >= <= 同于C#

          ~= 不等于(C# !=)

          Lua中取反 not(空格)   (C# !)

    8:运算优先级

          基本同于C#,直接用括号显示的表现优先级 容易理解

          -x^2  -------> -(x^2)

          x^y^z --------->x^(y^z)

    9:Table构造式

         a = {x = 10 , y = 20} 等价于a ={["x"]=10 ,["y" =20]}  等价于 a = {} a["x"] =10 a["y"] =20  等价于 a = {} a.x= 10 a.y = 20

    10:Table里面删除一个变量

          a = {} a.x= 10  a.x= nil

    11:交换变量(Lua里面有点特别) (多重赋值 调函数时传入的实参多余或者少于形参时,与多重赋值非常相似)

         C#中:int a=1;int b=2; 交换: int c = a; a =b; b=c;

         Lua中:a = 1 b = 2  交换:a,b = b,a

         a,b = 1,2,3 ---->舍弃3

         a,b,c = 1,2  ----->c=nil

    12:流程控制

         1由于Lua不支持Switch语句,所以一连串的if elseif 是很常见的

         2循环中用break可以跳出循环

    13:Lua中没有 ++ --,并且 +=  -=也没有    如果递增1 a=a+1

    14:Lua中的Foreach( Generic for)

          1遍历所有k: a = {x=1,y=2,z=3;"one","two","three"}

            for k in pairs(a) do

            print(k)  ------>  1 2 3 y x z

            end

           2遍历所有v:

             for i , v in pairs(a) do

             print(v)  -------> one two three 2 1 3

             end

            2-2 遍历所有的v         

            for k in pairs(a) do

            print(a[k])  ------>  1 2 3 y x z

            end

            3遍历数组a的所有值

            for i , v in ipairs(a) do

            print(v)  ---------> one two three

            end

        值得注意的是:遍历数组a中的值,ipairs(a) 输出的并不是所有的value,以后慢慢了解

    15:逆向Table(反转key value)

           a = {x=1, y =2, z =3}

           b = {}

           for k,v in pairs(a) do

           b[v] = k

           end

    16:break与return

           break跳出循环,return跳出方法

           注意:但是如果return在if前面  报错

    17:方法的调用

           a = {}

           function a:Test() print("orz") end

           第一种调:a:Test()    第二种调:a.Test() 注意第二种隐式的传入了a  --->a.Test(a)

           假如 function有一个参数,用第二种调 a.Test(n) 报错,应该---> a.Test(a,n)

    18:方法的返回值

         function foo1() end 无返回值

         function foo2() return 1 end 返回一个值

         function foo3() return 1,2 end 返回两个值

         x,y = foo3() ----> x =1, y = 2

         x = foo3()  ------> x =1 ,  2被丢弃

         x,y,z = foo3() ----->x=1,y=2,z=nil

         x,y = foo3(),99  ----->x = 1,y = 99

         x,y = foo1(),20,30 ---->x = nil , y =20    30被丢弃

         注意:Table 可以接受 函数返回的所有值,前提是函数作为table构造式中最后一个参数,如果不是最后一个参数,那么只会取第一个返回值,无返回值则为nil

         如果强行让函数返回第一个值,可以用一对小括号 括起来函数 ---> (foo()) 不管foo有几个返回值,都只返回第一个,没有返回nil

          特殊内置函数 unpack:它接受一个数组作为参数,并从下标1开始返回该数组的所有元素

           例如:print(unpack({1,2,3,4,5,66}))   ----> 1,2,3,4,5,66

    19: 算术类元方法

    __add()   + 运算对应的元方法
    __sub()   
    __mul
    __div
    __mod
    __pow
    __unm     相反数
    __concat  .. 运算对应的元方法

          

              

             

  • 相关阅读:
    pycharm快捷键
    Docker
    Go语言与Elasticsearch
    Celery与APScheduler
    爬虫入门到入狱
    数据分析
    后台管理
    Linux基础与自动化运维
    微信小程序
    Git
  • 原文地址:https://www.cnblogs.com/cocotang/p/5864861.html
Copyright © 2020-2023  润新知