目录

Lua初探-八类型


基本数据类型

Lua中有八种基本数据类型:nil、boolean、number、string、function、userdata、thread、table

  • 1、nil:nil本身有一个单独的值。其通常用来表示没有用或者说没有设置有值的值。

  • 2、boolean:与其他语言一样,boolean存在两种值,false、true;当值为false时或者nil时,其boolean值为false,其余的均为ture。

  • 3、number:代表整数值或者真实的浮点数;number在内部一般通过integer或者float进行表示。

  • 4、string:string类型表示不可变的bytes序列;Lua是8进制的,string可以包含任意8进制的值,lua不会对string中的内容做任何的转换。

  • 5、function:lua可以调用写在Lua文件中的或者C文件中的方法,两种都是通过function类型进行表示。

  • 6、userdata:通过userdata可以确保任意的C代码中的数据都可以存储在用userdata类型定义的lua的变量中。一个userdata定义的值在计算机中表示一小块内存;有两种类型的userdata:1)full userdata:它是一个对象,其所占据的内存被lua进行管理;2)light userdata:其本质是C中的指针。在Lua中,userdata没有预定义的操作。注:在Lua中不能创建或者修改userdata,只能通过调用C的API进行操作,通过这个保证了主机中数据的完整性(??)。

  • 7、thread :lua中的thread代表一个独立的可执行的县城,其通常用来实现协程。Lua中的Thread不依赖操作系统,其在所有系统中都支持协程的操作,甚至本身不支持线程的系统。

  • 8、table:table实现了关联数组,table不仅可以以number做为索引,其也可以使用任意的除nil和NaN意外的值作为索引;

    • table可以是异构的; 也就是说,它们可以包含所有类型的值(除了nil)。 值为nil的任何键都不被视为表的一部分。 相反,任何不属于表的键都具有关联值nil。Table在Lua中是唯一的数据结构机制,可以使用table去表示字典数组,列表,字符表、集合、记录、图、树;
    • 使用table作为记录时,Lua使用字段名作为下标。Lua支持点语法糖,a.name与a[“name”]都是支持的。
    • 像索引一样,table的字段值可以时任意类型,因为在Lua中,方法时第一类型值,table也可以使用方法作为字段值。
    • 表的索引遵循语言中原始相等的定义,如a[i]与a[j]表示表的某些元素,如果i和j是原始值相等的。(原始值相等后面会有解释),如积分的float类型的值在比较的时是使用其各自的整型值。为了避免歧义,任何作为键的float值都将转换成各自的整数值。例如,a[2.0]=true,实际上key插入的值是2(注意,在lua中,2和'2’)是不同的;
  • table,funcation,thread,和full userdata值都是对象,变量不会之间包含其值,只会引用他们,注:赋值操作中,参数的传递和方法返回总是操作这些值的引用,也就是说部队对其作任何形式的拷贝;