zoukankan      html  css  js  c++  java
  • Lua学习笔记(一)

    注释

    -- 单行注释
    
    --[[
    多行注释
    ]]
    
    -- 等号数量只要两边一致即可
    --[=[多行注释]=]
    

    标识符

    A-Z、a-z、下划线_开头后加上0个或多个字母、下划线、数字(0-9)

    注意:最好不要使用下划线加大写字母,Lua保留字也是如此

    不允许特殊字符@、$、%定义标识符

    区分大小写

    关键词

    -- Lua的保留关键字
    and break do else elseif end false for function if in local nil not or repeat return then true until while
    -- 一般约定,以下划线开头连接一串大写字母的名字(如_VERSION)被保留用于Lua内部全局变量
    _VERSION
    

    全局变量

    --[[
    默认情况下变量认为是全局的,不需要声明,赋值后即创建了这个全局变量,访问一个没有初始化的全局变量不会出错,会返回nil
    --]]
    print(b) -- 返回nil
    b=10
    print(b) -- 返回10
    -- 如果要删除一个全局变量,只需要将变量赋值为nil
    b=nil
    print(b) -- 返回nil
    

    数据类型

    -- Lua是动态类型语言,不需要定义,只需要赋值。值可以储存在变量中,作为参数传递或结果返回
    -- 8个基本类型nil、boolean、number、string、userdata、function、thread、table
    --[[
    nil			只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)
    boolean		包含两个值:false和true
    number		双精度类型的实浮点数
    string		字符串由一对双引号或单引号来表示
    function	由C或Lua编写的函数
    userdata	表示任意存储在变量中的C数据结构
    thread		表示执行的独立线程,用于执行协程
    table		Lua中的表是一个“关联数组”,数组的索引可以是数字、字符串或表类型。在Lua里,table的创建时通过“构造表达式”来完成,最简单构造表达式是{},用来创建一个空表
    ]]
    type() -- 该函数可以测试给定变量或者值得类型
    

    nil(空)

    -- nil类型表示没有任何有效值,它只有一个值nil
    print(type(a)) -- 输出nil
    -- 对于全局变量和table,nil有删除的作用
    tab1={key1="val1",key2="val2","val3"}
    for k,v in pairs(tab1) do
        print(k .. " - " .. v) -- ..运算符用于连接字符串
    end
    
    tab1.key1=nil
    for k,v in pairs(tab1) do
        print(k .. " - " .. v)
    end
    

    boolean(布尔)

    -- 只有两个可选值:false、true,Lua把false和nil看作是“假”,其他的都为真
    if false or nil then
        print("至少有一个是true")
    else
        print("false和nil都为false!")
    end
    -- 执行结果为false和nil都为false!
    

    number(数字)

    -- Lua默认只有一种number类型 double(双精度)类型
    print(type(2))		-- 输出number
    print(type(2e+1))	-- 输出number
    

    string(字符串)

    string1="this is string1"
    string2="this is string2"
    -- 也可以用两个方括号“[[]]”来表示“一块”字符串,输出时会将换行和制表等格式也输出
    string3=[[
    emmmmmmmmmm
    aaaaaaaaaaa
    ruaruaruaruarua!
    ]]
    -- 对一个数字字符串进行算术操作,Lua会尝试将这个数字字符串转成一个数字
    print("2"+6)		-- 输出8.0
    print("-2e2"*"6")	-- 输出-1200.0
    -- 字符串连接使用..操作符,注意操作对象如果为数字,则操作对象与操作符之间需要加空格
    print("2".."b")		-- 输出2b
    print(233 .. 666)	-- 输出233666
    -- 使用#来计算字符串长度,放在字符串前面
    len="www.rua.com"
    print(#len)				-- 输出11
    print(#"helloworld")	-- 输出10
    

    table(表)

    -- 创建一个空表
    local tbl1={}
    -- 直接初始表
    local tbl2={"a","b","c","d"}
    -- 创建键值对
    a["key"]="value"
    a[1]=22
    key=10	-- 这里只是赋值,赋值后用于后面的创建键值对
    a[key]=22
    a[a[key]]=a[key]+11
    -- 在Lua中,默认初始索引一般以1开始
    local tb1={"a","b","c"}
    for key,val in pairs(tb1) do
        print("Key",key)
    end
    --[[
    输出:
    Key 1
    Key 2
    Key 3
    ]]
    -- table的长度是动态增长的
    

    function(函数)

    -- 在Lua中,函数是被看作“第一类值(First-Class Value)”,函数可以存在变量里
    function fun1(n)	-- 一个递归求阶乘的函数
        if n == 0 then
            return 1
        else
            return n*fun1(n-1)
        end
    end
    print(fun1(5))		-- 输出120
    fun2=fun1
    print(fun2(5))		-- 输出120
    -- 也可以使用匿名函数的形式
    function testFun(tab,fun)
        for k,v in pairs(tab) do
            print(fun(k,v))
        end
    end
    
    tab={kay1="val1",key2="val2"}
    testFun(tab,
    	function(key,val)
            return key .. "=" .. val
    	end
    )
    --[[
    执行结果:
    key1=val1
    key2=val2
    ]]
    

    thread(线程)

    Lua中主要的线程是协程(coroutine)

    线程可以同时多个运行,协程任意时刻只能运行一个

    userdata(自定义类型)

    用户自定义数据,用于表示一种由应用程序或C/C++语言库所创建的类型,可以将任意C/C++的任意数据类型的数据(通常是struct和指针)存储到Lua变量中调用

  • 相关阅读:
    php底层HashTable的实现
    【问底】徐汉彬:PHP7和HHVM的性能之争
    linux查找系统中占用磁盘空间最大的文件
    深入理解Yii2.0(yii学习的经典博客)
    梦想天空(关注前端开发技术 html5+css3)
    风雪之隅(Laruence PHP开发组成员, Zend兼职顾问, Yaf, Yar, Yac, Opcache等项目作者、维护者.)
    阿里云收集服务器性能指标的python脚本
    简单5步,释放Mac磁盘空间
    我是如何自学Android,资料分享(2015 版)
    查询tensorflow中的函数用法
  • 原文地址:https://www.cnblogs.com/JaxesZ/p/11216985.html
Copyright © 2011-2022 走看看