zoukankan      html  css  js  c++  java
  • lua基础

    1、if代码块

    x = 10
    if x > 0 then
        print("x")
    elseif x = 0 then
        print("x")
    else
        print("x is a non-positive number")
    end

    2、while代码块,lua没有提供do-while结构

    x = 1
    sum = 0
    
    while x <= 5 do
        sum = sum + x
        x = x + 1
    end
    print(sum)  -->output 15

    3、repeat代码块,until的条件为真时结束,这一点与其它语言有所区别

    --死循环
    x = 10
    repeat
        print(x)
    until false

    4、for循环

    数字for(numeric for),第三个表达式step是可选的,表示增幅,默认为1

    for i=1,10,2 do
      print(i)
    end
    
    -- output:
    1
    3
    5
    7
    9

    范型for(generic for)循环通过一个迭代器(iterator)函数来遍历所有值:

    -- 打印数组a的所有值
    local a = {"a", "b", "c", "d"}
    for i, v in ipairs(a) do
      print("index:", i, " value:", v)
    end
    
    -- output:
    index:  1  value: a
    index:  2  value: b
    index:  3  value: c
    index:  4  value: d

    标准库提供了几种迭代器,包括用于迭代文件中每行的(io.lines)、迭代table元素的(pairs)、迭代数组元素的(ipairs)、迭代字符串中单词的(string.gmatch)等。

    5、break和return关键字

    break用在循环体中,用于跳出当前循环体,继续执行后面的代码

    return用于从函数中返回结果,后面的代码都不会执行。

    6、函数

    在调用函数的时候,若形参个数和实参个数不同时,Lua会自动调整实参个数。调整规则:若实参个数大于形参个数,多余的实参被忽略;若实参个数小于形参个数,没有被实参初始化的形参会被初始化为nil。

    function fun1(a, b)  --两个形参,多余的实参被忽略掉
       print(a, b)
    end
    
    function fun2(a, b, c, d) --四个形参,没有被实参初始化的形参,用nil初始化
       print(a, b, c, d)
    end
    
    local x = 1
    local y = 2
    local z = 3
    
    fun1(x, y, z)  -- z被函数fun1忽略掉了,参数变成 x, y
    
    fun2(x, y, z)  -- 后面自动加上一个nil,参数变成 x, y, z, nil
    
    -->output
    1   2
    1   2   3   nil

    函数有两种表现形式

    function add1(param1, param2)
        return param1 + param2
    end
    
    local add2 = function(param1, param2)
        return param1 + param2
    end
    
    add1(1, 2)
    add2(1, 2)

    add1方法是一个全局函数,如果需要定义成局部的,需要在function前面加local定义

    add2是将一个方法赋值给一个局部变量add2

    两种形式都可以,我比较喜欢第二种,显示的定义局部函数,具有较好的阅读性。

    7、函数变长参数

    变长参数,lua支持变长参数,形参为...

    function func(...)  --形参为 ... ,表示函数采用变长参数
    
       local temp = {...}   --访问的时候也要使用 ...
       local ans = table.concat(temp, " ")  --使用table.concat库函数,对数组内容使用" "拼接成字符串。
       print(ans)
    end
    
    func(1, 2)      --传递了两个参数
    func(1, 2, 3, 4)  --传递了四个参数
    
    -->output
    1 2
    
    1 2 3 4

    变长参数在lua5.2版本中做了一次升级

    在lua5.1中,变长参数...默认会创建一个临时表arg,并且拥有一个全局属性n,通过arg.n获取可变参数的长度

    local function test( ... )  
          num = arg.n  
          return num   
    end  

    由于可变参数创建的临时表会影响性能,在5.2版本中需要我们自己定义一个arg  table,而且删除了arg.n这种直接得到可变参数个数的方法

    local function test( ... )  
          arg = { ... }    --这里的...和{}符号中间需要有空格号,否则会出错  
          local count = 0  
          for k,v in pairs(arg) do  
              count = count + 1  
          end  
          return count  
    end  

    通过select方法获取可变参数中的指定位置的参数

    句法:select(selector, ...)

    select(“#”, ...):获取可变参数的长度

    select(n, ...):截取第n个参数到结尾的列表

    local arg = select(n, ...):可以取到第n个参数,后面的列表都被舍弃了

    function foo(...)  
        for i = 1, select('#', ...) do  --get the count of the params  
            local arg = select(i, ...); --select the param  
            print("arg", arg);  
        end  
    end  
      
    foo(1, 2, 3, 4)
    
    --output
    arg 1
    arg 2
    arg 3
    arg 4

    8、回调函数

    将回调函数作为参数,传入其它方法中。

    local m = {}  
      
    local list = {name="hello",age=12}  
    m.call_back_fun_print = function(printID)  
        print(printID .. "-->" .. list[printID])  
    end  
      
    m.add_list = function(key,value,call_back_fun)  
        key = tostring(key)  
        list[key] = value  
        call_back_fun(key)  
    end  
    m.add_list("address","beijing",m.call_back_fun_print) --address-->beijing  
      
    return m  
  • 相关阅读:
    python3-使用进程方式进行并发请求
    matplotlib--添加图例和注解
    matplotlib修改坐标轴刻度值,刻度个数
    matplotlib(一)
    python-jit(提高代码运行速度)
    pandans处理Excel
    base64编解码实现
    wireshark使用
    python 教程
    linux命令之 top, free,ps
  • 原文地址:https://www.cnblogs.com/wangzhisdu/p/7773451.html
Copyright © 2011-2022 走看看