• Lua笔记


    1. Hello world

    -- test.lua

    function fact(n)

    if n==0 then

    return 1;

    else

    return n*fact(n-1);

    end

    end

     

    print("Hello, World!");

    a=io.read("*number");

    print(fact(a));

    1. 交互模式

    1. 注释
    • 行注释:--
    • 块注释:--[[开始 …..结束]] ,常用--[[ …. --]] 或--[=[ …]] …]=](之间可以加任意数量的等号)
    1. 全局变量
    • 初始值为nil
    • 若要删除只需赋予nil值就行
    1. 解释器程序
    • 下载地址:http://www.lua.org
    • lua [选项参数] [脚本参数]
      • 选项参数-e直接输入代码
      • -l 加载库文件
      • -i 运行完后进入交互模式

    lua -i –l a –e "x=10"

    • 可以直接打印任何表达式的值,以等号开头

    • 解释器执行参数之前,会先查找一个名为LUA_INIT的环境。
      • 若找到,且LUA_INIT=@文件名,则会先执行此文件。
      • 若找到,但没以@开头,则将LUA_INIT=变量
    • 命令行参数

    lua –e "sin=math.sin" script a b

    arg[1]=="a"

    arg[2]=="b"

    1. 类型与值

    8种基础类型:nil、boolean、number、string、userdata、function、thread、table。

    判断类型名称使用type,返回的是字符串

     

    1. nil

    1. boolean
    • true和false
    • 在条件测试中,把数字0和空字符串也视为真
    1. number
    • 以浮点数进行运算。4、4.4、 4.55e-3、0.3e12、5e+20
    • 若要以整数进行运算,需重新编译lua。详见luaconf.h
    1. string
    • 字符串不可修改,要修改需重新创建

    a="one aa";

    b=string.gsub(a,"one","two");

    print(a) --输出one aa

    print(b)--输出two aa

    • 转义序列
      • \f、 \n、 \r 、\t、 \\ 、\"、 \'等
      • \ddd 如\097
      •  

        \a --- bell

        \b --- backspace

        \f --- form feed

        \n --- newline

        \r --- carriage return

        \t --- horizontal tab

        \v --- vertical tab

        \\ --- backslash

        \" --- quotation mark

        \' --- apostrophe

        \[ --- left square bracket

        \] --- right square bracket

        \ddd ===> 转义成 ddd 对应的字符。比如 print("\65") ===> A

    • 块字符串
      • 使用[[ … ]]

    page=[[

    <html>

    </html>

    ]]

    • 在[中加任意数量的等号,如[=[ … ]=]

    page=[===[

    <html>

    [[…]]

    </html>

    ]===]

    • 字符串转整数

    local szDigital = "123456";

    local nResult = szDigital + 333;

    -- 结果是 nResult 是 123789

    • 建议最好使用tonumber(…)

      local line = io.read();

      local n=tonumber(line);

      if nil==n then

          error(line.."is not a valid number");

      else

          print(n*3);

      end

    • 字符串连接(整数转字符串)

    local nItemType = 123;

    local szItemType = "aa" .. nItemType;

    -- 结果是 szItemType 是 "aa123"

    • 建议最好使用tostring(…)

      print(tostring(10) == "10") àtrue

      print(10 == "10") àfalse

    获得字符串长度#

    local a="hello";

    print(#a); -->5

    1. table

    table没有大小,可以任意地添加。

    1、数组定义:

    local array = { 1, 2, 3, 4 };

    local array2 = {

    { 1, 2, 3 },

    { 2, 3, 4 }

    };

    2、数组使用:

    a = array[1];

    b = array2[1][3];

    3、注意:数组的下标是1基的。也就是array是从1~4。

    4、local size = table.getn(array) --这样可以取到表的长度为4(需要lua_tablibopen库支持)

    5、数组元素的最后一个值后面,可以多加一个逗号(,)。例如:local array = { 1, 2, 3, 4, };

    local a={};

    a["10"]=10;

    a[10]="abc";

    a["abc10"]=a["10"]..a[10];

     

    local b=a;

    print(b["10"]); à10

    a=nil;

    print(b["10"]); à10

    b=nil;

     

    local a={};

    a["aa"]=10;

    print(a.aa); à10

     

    b="bb";

    a[b]=20;

    print(a[b]); à20

    print(a.b);ànil

    print(a.bb);à20

    注意:lua将nil作为数组结尾,所以应避免使用#。如果真的要使用含有nil的数组,可以使用table.maxn()

    a={};

    a[100]=1;

    print(table.maxn(a)); à100

    print(#a); à0

     

    1. function

    注意:内部变量必须用"local "来限定,否则会被LUA当成"全局变量"。

    1. userdata
    2. thread

     

    1. 表达式

      1. if表达式

    if (条件) then

    语句1;

    语句2;

    end

     

    if (条件) then

    语句1;

    语句2;

    else

    语句3;

    end

     

    if (条件) then

    语句1;

    语句2;

    elseif (条件) then

    语句3;

    end

     

    1. "条件"的写法:

    if (a > b and c < d) then    -- && !

    if (a <= b or c >= d) then

    if (not (a == a)) then

    if (a ~= b) then         -- 不等于

    注意:除"nil"与bool类型的"false"以外, 一切数字与字符串(包括0与空串)都是true。

    如果想判断一个值是不是C++意义上的TRUE,可写成:

    if (a ~= 0) then

    1. 循环

    1、普通for循环

    for i=1,10 do

    print(i)

    end

    2、递减的for循环

    for i=10,1,-1 do

    print(i)

    end

    3、注意:for语句中的 i 是local型的局部变量,仅在"for循环内部"有效。    !

    注意:在循环中不要去修改控制变量 i 。    !

    注意:如果在条件部分(for和do之间)有函数调用,这些函数只会调用一次。

    1. while循环及break调用

    local i = 1

    while a[i] do

    if a[i] == v then break end

    i = i + 1

    end

  • 相关阅读:
    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
    MLIR算子量化Quantization
    最大限度地减少块输出中间结果的计算和存储
    Echarts(一)
    Oracle部署安装
    JS使用
    sqlplus导入sql,dmp导入导出
    一款强大的Visual Studio插件!CodeRush v19.1.9全新来袭
    Web界面开发必看!Kendo UI for jQuery编辑功能指南第二弹
    报表开发神器!DevExpress Reporting v19.1全平台新功能解析
  • 原文地址:https://www.cnblogs.com/tuzhiye/p/1552671.html
Copyright © 2020-2023  润新知