• lua 学习


    尽管所有的脚本语言在特定领域都有自己的一席之地,但在游戏开发的世界里,Python 和 Lua 是非常适合的,因为它们可以直接调用C++的功能。

    lua最让人惊喜的地方应该是它的执行速度,目前没有任何一个项目因为lua的使用而造成瓶颈。lua的内核小于120KB,Python的内核大约860KB,Perl的内核大约1.1MB,lua通常比python运行更快速。

    单行注释: --

    多行注释: --[[ 注释内容 ]]

    交换变量: a,b = b,a

    不等于:~=

    在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。比如:
    local a,b,c = 1,2,3  -- a,b,c都是局部变量

    Lua还多了一个"^"。这表示指数乘方运算。比如2^3 结果为8, 2^4结果为16。

    连接两个字符串,可以用".."运处符。如:
    "This a " .. "string." -- 等于 "this a string"

    对于Table,Function和Userdata类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如:
    a={1,2}
    b=a
    print(a==b, a~=b)  --输出 true, false
    a={1,2}
    b={1,2}
    print(a==b, a~=b)  --输出 false, true

    and, or, not
    其中,and 和 or 与C语言区别特别大。
    在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
    and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
    a and b:如果a为false,则返回a;否则返回b
    a or b:如果 a 为true,则返回a;否则返回b

    举几个例子:
    print(4 and 5) --输出 5
    print(nil and 13) --输出 nil
    print(false and 13) --输出 false
    print(4 or 5) --输出 4
    print(false or 5) --输出 5

    在Lua中这是很有用的特性,也是比较令人混洧的特性。
    我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
    最有用的语句是: x = x or v,它相当于:if not x then x = v end 。

    运算符优先级,从低到高顺序如下:
         or
         and
         <     >     <=    >=    ~=    ==
         .. (字符串连接)
         +     -
         *     /     %
         not   #(lua5.1 取长度运算)     - (一元运算)
         ^
    和C语言一样,括号可以改变优先级。

    关键字是不能做为变量的。Lua的关键字不多,就以下几个:
         
    and        break        do        else        elseif        
    end        false        for        function        if        
    in        local        nil        not        or        
    repeat        return        then        true        until        while

    怎么确定一个变量是什么类型的呢?大家可以用type() 函数来检查。Lua支持的类型有以下几种:
    Nil        空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。
    Boolean        布尔值,只有两个有效值:true和false
    Number        数值,在Lua里,数值相当于C语言的double
    String        字符串,如果你愿意的话,字符串是可以包含""字符的(这和C语言总是以""结尾是不一样的)
    Table        关系表类型,这个类型功能比较强大,请参考后面的内容。
    Function        函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。
    Userdata        嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的 有Struct和指针
    Thread        线程类型,在Lua中没有真正的线程。Lua中可以将一个函 数分成几部份运行。如果感兴趣的话,可以去看看Lua的文档。
    现在回过头来看看,倒觉得不是线程类型。反而象是用来做遍历的,象是Iterator函数。
    如:
    function range(n)
      local i = 0
      while(i < n) do
        coroutine.yield( i )
        i = i + 1
      end
    end
    可惜的是要继续运行,需要coroutine.resume函数,有点鸡肋。请指教。

    用"[[" 和"]]"将多行的字符串括起来。值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"["或"]"来避免歧义.

     标识符定义,要避免下划线接大写字母,这是LUA自身保留的,如 _Start

    命名约定:

    常量使用大写字母和下划线

    变量第一字母小写

    函数第一字母大写

    全局变量以小写 g 开头

    如果给一个变量赋值为 nil ,实际上表示删除该变量。

    如果用户比较两个 table ,只有两个 table 是同一个对象的时候才能得到预期的结果,因为变量只是 table 对象的引用(像指针一样),不能直接比较存在于 table 中的值。

    for循环中的变量是局部变量。

    for i = 10,1,-1 do print(i) end

    luabind、luaplus、lua_tinker

  • 相关阅读:
    Ubuntu apt-get "Hash Sum mismatch" 问题解决方法
    模型压缩相关工作
    bn两个参数的计算以及layer norm、instance norm、group norm
    cascade rcnn论文总结
    c++ 堆和栈以及区别
    c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
    c++ 多态,虚函数、重载函数、模版函数
    c++问题整理
    repulsion-loss
    smooth l1
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/3152899.html
Copyright © 2020-2023  润新知