zoukankan      html  css  js  c++  java
  • lua 学习

    Chunk

    Chunk是一系列语句。交互模式下的每一行都是一个Chunk。一个lua文件也可以是一个Chunk,文件可用dofile导入。

    变量

    全局变量不需要初始化,未初始化变量的值是nil。删除一个变量只需将其赋值为nil。

    局部变量用 local 修饰

    注释

    单行注释: --
    多行注释:

    --[[
    这里被注释了
    --]]
    
    ### 命令行执行 lua
    
    lua [options] [script [args]]
    
    -e "command" : 直接用lua解释command
    -l : 加载一个文件
    -i : 进入交互模式, _PROMPT 是交互模式的提示符
    
    ### 基本类型
    
    • nil
    • boolean
    • number
    • string
    • userdata
    • function
    • thread
    • tab
    
    函数type可以测试给定变量或值的类型
    

    print(type("Hello world")) --> string
    print(type(10.4*3)) --> number
    print(type(print)) --> function
    print(type(type)) --> function
    print(type(true)) --> boolean
    print(type(nil)) --> nil
    print(type(type(X))) --> string

    
    ---
    ### 表
    
    lua的表序号是从1算起的,而不是c里的0. 例如
    ```lua
    days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }
    
    print(days[4])
    

    --> Wednesday


    赋值语句

    lua可以对多个变量同时赋值

    a, b = 10, "2*x"
    print(a, b)
    

    --> 10 2*x

    遇到赋值语句,lua会先计算等号右边所有的值,再执行赋值操作。所以:

    x, y = y, x
    

    交换了x, y的值

    局部变量

    local 创建局部变量,局部变量只在被声明的那个代码块里有效。
    do .. end 相当于c中的{},可以包住一块代码,控制local的有效范围。

    控制语句

    lua认为false和nil为假,其他值为真。

    • if 语句
    if conditions then
       then-part
    end;
    
    if conditions then
       then-part
    else
       else-part
    end;
    
    if conditions then
       then-part
    elseif confitions then
       elseif-part
    ..
    else
       else-part
    end;
    
    • while 语句
    while condition do
       statements;
    end;
    
    • repeat-until
    repeat
       statements
    until conditions;
    
    - for
    数据循环:
    

    for var=exp1, exp2, exp3 do
    loop-part
    end
    三个表达式只会在循环开始前计算一次
    控制变量是自动被声明的自动变量,只有循环内有效
    循环过程中不要改变控制变量的值。
    退出循环使用break

    范型循环:

    for i, v in ipairs(a) do print(v) end
    
    - break, return
    break用来退出当前循环,在循环体外不可使用。
    return用来从函数返回结果。函数自然结束时结尾会有一个默认的return。
    
    lua要求break和return只能出现在block的结尾,如chunk的最后一句,end/else/until之前。
    
    ---
    
    ## 函数
    

    function func_name(arguments-list)
    statements-list;
    end;

    调用函数时,都要在函数名之后加()。当函数只有一个参数,并且这个参数是字符串或者表构造时,调用这个函数可以不加()。例如:
    

    print "Hello World" <--> print("Hello World")
    f{x=10, y=20} <--> f({x=10, y=20})
    type{} <--> type({})

    
    函数调用时实参与形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用nil替换。
    
    - lua函数可以返回多个值
    

    s, e = string.find("hello lua users", "lua")
    print(s, e)

    --> 7 9
    
    - 可变参数 ...
    lua将参数放在一个叫arg的表中,arg还有一个域n表示参数个数
    
    - 命名参数
    

    rename{old="temp.lua", new="temp1.lua"}

    
    函数名实际上是一个指向函数的变量,函数定义实际上是一个赋值语句,将类型为function的变量赋给一个变量。以下两句是等效的
    

    function foo(x) return 2x end
    foo = function(x) return 2
    x end

    
    - 闭包
    
    
    ---
    
    全局变量_G中存储了所有全局变量的名字。可以这样打印:
    

    for n in pairs(_G) do print(n) end

  • 相关阅读:
    机器学习(04)——常用专业术语
    C# 线程同步的三类情景
    线程同步的情景之三
    线程同步的情景之二
    线程同步的情景之一
    Thread.Sleep(0) vs Sleep(1) vs Yeild
    Visual Studio 实用扩展推荐
    为革命保护视力 --- 给 Visual Studio 换颜色
    免费的精品: Productivity Power Tools 动画演示
    如何扩展 Visual Studio 编辑器
  • 原文地址:https://www.cnblogs.com/sammei/p/3953365.html
Copyright © 2011-2022 走看看