美文网首页
lua 数据类型

lua 数据类型

作者: 沉睡中勿扰 | 来源:发表于2021-04-20 11:44 被阅读0次

    一直在说要写个lua系列,已经开始了第一篇,这是第二篇。其实,对程序来说,什么最重要呢?当然是数据了,逻辑不过是对数据的处理,放到合适的位置。聊数据的话,从哪说起,先从数据类型吧!

    lua中有8个基本类型:nil, boolean, number, string, userdata, function, thread 和 table。


    lua数据类型.jpg

    nil(空)

    nil 类型没有任何有效值

    boolean(布尔)

    boolean 有2个值,true和false,在lua 中,nil, 0, false 都可以理解成false;其他为true;和其他语言不一样,其他语言0, false是false 的意思。

    number(数字)

    在lua里,只有一种数据类型number,不管是int ,long ,long long 等等,可以参考luaconf.h ,如下图所示:


    lua数据类型number1.jpg

    上图是有关一些精度的定义

    lua数据类型number2.jpg

    上图是所有和number数据类型有关的代码,感兴趣,可以参考这个相关代码。

    string (字符串)

    在lua中字符串用单引号或者双引号来包括。
    关于字符串的所有操作,可以在lstrlib.c 中找到,大概有以下操作:


    lua数据类型string.jpg

    这个是lua库里相关的,如果有需要做扩展的,可以在此扩展自己的方法。

    table (表)

    在lua里,table是一个很重要的数据结构了,几乎所有的操作都是可以理解成对表的操作。当然,对表的操作,有以下几种,如下图所示:


    lua数据类型table.jpg

    这些操作在ltablib.c中,行号已经给出。可以参考。

    function(函数)

    函数,在lua里被看作是“第一类值”,另外,需要注意匿名函数和闭包函数。

    匿名函数

    testFunc(tab,
    function(key,val)--匿名函数
            return key.."="..val;
    end
    );
    
    

    闭包函数

    function test(n)
       local function test1()  //闭包1
          print(n)
       end
       local function test2()  //闭包2
          n = n + 10
       end
       return test1, test2
    end
    
    

    thread(线程)

    在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

    线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

    协程的主要操作如下图:

    lua数据类型coroutine.jpg

    userdata(自定义类型)

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

    相关文章

      网友评论

          本文标题:lua 数据类型

          本文链接:https://www.haomeiwen.com/subject/gniglltx.html