关闭

Lua的值与类型

标签: Lua的值与类型
255人阅读 评论(0) 收藏 举报
分类:

Lua 是一门动态类型语言。 这意味着变量没有类型;只有值才有类型。 语言中不设类型定义。 所有的值携带自己的类型。


Lua 中所有的值都是一等公民。 这意味着所有的值均可保存在变量中、 当作参数传递给其它函数、以及作为返回值。


Lua 中有八种基本类型: nil booleannumberstringfunctionuserdatathread table。 


Nil是值 nil 的类型, 其主要特征就是和其它值区别开;通常用来表示一个有意义的值不存在时的状态。

Booleanfalsetrue 两个值的类型。 nil false 都会导致条件判断为假; 而其它任何值都表示为真。

Number代表了整数和实数(浮点数)。 number 类型有两种内部表现方式, 整数 和 浮点数。 对于何时使用哪种内部形式,Lua 有明确的规则, 但它也按需作自动转换。因此,程序员多数情况下可以选择忽略整数与浮点数之间的差异或者假设完全控制每个数字的内部表现方式。 标准 Lua 使用 64 位整数和双精度(64 位)浮点数, 但你也可以把 Lua 编译成使用 32 位整数和单精度(32位)浮点数。 以 32 位表示数字对小型机器以及嵌入式系统特别合适。(参见 luaconf.h 文件中的宏 LUA_32BITS 。)

String表示一个不可变的字节序列。Lua 对 8 位是友好的: 字符串可以容纳任意8 位值, 其中包含零 ('\0') 。 Lua 的字符串与编码无关; 它不关心字符串中具体内容。

Lua 可以调用(以及操作)用 Lua 或 C 编写的函数。 这两种函数有统一类型function

userdata类型允许将 C 中的数据保存在 Lua 变量中。 用户数据类型的值是一个内存块, 有两种用户数据: 完全用户数据 ,指一块由 Lua 管理的内存对应的对象;轻量用户数据 ,则指一个简单的 C 指针。 用户数据在Lua 中除了赋值与相等性判断之外没有其他预定义的操作。 通过使用元表 程序员可以给完全用户数据定义一系列的操作。 你只能通过C API 而无法在 Lua 代码中创建或者修改用户数据的值, 这保证了数据仅被宿主程序所控制。

thread类型表示了一个独立的执行序列,被用于实现协程 Lua 的线程与操作系统的线程毫无关系。 Lua 为所有的系统,包括那些不支持原生线程的系统,提供了协程支持。

table是一个关联数组, 也就是说,这个数组不仅仅以数字做索引,除了nil和 NaN 之外的所有 Lua 值 都可以做索引。 (Not a Number是一个特殊的数字,它用于表示未定义或表示不了的运算结果,比如0/0。) 


可以是异构的; 也就是说,表内可以包含任何类型的值( nil 除外)。任何键的值若为 nil 就不会被记入表结构内部。 换言之,对于表内不存在的键,都对应着值nil 表是 Lua 中唯一的数据结构, 它可被用于表示普通数组、序列、符号表、集合、记录、图、树等等。 对于记录,Lua 使用域名作为索引。 语言提供a.name 这样的语法糖来替代 a["name"] 这种写法以方便记录这种结构的使用。 在 Lua 中有多种便利的方式创建表我们使用序列这个术语来表示一个用 {1..n} 的正整数集做索引的表。 这里的非负整数n 被称为该序列的长度和索引一样,表中每个域的值也可以是任何类型。 需要特别指出的是:既然函数是一等公民,那么表的域也可以是函数。 这样,表就可以携带方法索引一张表的原则遵循语言中的直接比较规则。 当且仅当i j 直接比较相等时 (即不通过元方法的比较), 表达式 a[i] a[j] 表示了表中相同的元素。 特别指出:一个可以完全表示为整数的浮点数和对应的整数相等(例如:1.0 == 1)。 为了消除歧义,当一个可以完全表示为整数的浮点数做为键值时, 都会被转换为对应的整数储存。 例如,当你写a[2.0] =true时, 实际被插入表中的键是整数 2 。 (另一方面,2 与 "2" 是两个不同的 Lua 值, 故而它们可以是同一张表中的不同项。)


表、函数、线程、以及完全用户数据在 Lua 中被称为对象: 变量并不真持有 它们的值,而仅保存了对这些对象的 引用。 赋值、参数传递、函数返回,都是针对引用而不是针对值的操作, 这些操作均不会做任何形式的隐式拷贝。库函数type 用于以字符串形式返回给定值的类型。


参考《Lua 5.3 manual》

0
0
查看评论

lua类型与值

八种 nil(空) boolean(布尔) number(数字) string(字符串) table(表) function(函数) userdata(自定义类型) thread(线程)nil是一种类型,它只是一个值nil,它的主要功能是用于区别其他任何值,一个全局变量在赋值前的默认...
  • angelwant
  • angelwant
  • 2017-11-29 18:45
  • 34

Lua类型与值

Lua是一种动态类型语言。在语言中没有类型定义的语法,每个值都携带了它自身的类型信息。 在Lua中有8种基础类型:nil(空,如果给一个全局变量赋值nil等同于删除它)、boolean(布尔,只有nil和false表示“假”,其他全视为真)、number(数字)、string(字符串,可以在字符串前...
  • q5512049
  • q5512049
  • 2016-03-04 14:35
  • 171

Lua 类型与值

Lua是一个动态类型的语言,没有类型定义,每个值都有自己的类型。 Lua有8个基本类型,nil, boolean, number, string, userdata, function, thread, table,利用type函数可以打印出一个给定值的类型。 注...
  • Liar0606
  • Liar0606
  • 2014-01-17 01:19
  • 764

Lua的类型与值

首先Lua是一种动态类型的语言。在Lua中一共有8种基础类型:nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)和table(表)。print(type("Hello world...
  • u013517637
  • u013517637
  • 2015-07-10 13:15
  • 468

Lua学习笔记四之用C为Lua定义类型(UserData)

继续学习Lua与C交互,下面是在用C为Lua定义类型(UserData)的笔记以及自己的理解,其中学习过程中的写的测试代码都可以从我的github下载。      0、Lua中使用userdata类型来表示在C中定义的类型。userdata只是提供了一块原始的内存区域...
  • MaximusZhou
  • MaximusZhou
  • 2014-02-28 19:28
  • 3759

(二)Lua类型与值

Lua有八种基础类型:nil(空), boolean(布尔), number(数字), string(字符串), userdata(用户自定义),function(函数), thread(线程), and table(表)
  • SamingWong
  • SamingWong
  • 2016-08-17 17:15
  • 156

Lua 类型与值(二)

Lua脚本语言 目录(?)[-] TableFunctionsUserdata和Threads 5.Table Lua的table类型比较强大,用过都知道,它的index不仅可以使用number,还能使用string等其他的值,nil除外。table没有固定的size,你可以动态地向t...
  • Liar0606
  • Liar0606
  • 2014-01-17 01:33
  • 679

Lua学习笔记-判断是否是布尔型

1、如何在在不使用type函数的前提下判断是否是布尔型 代码如下: -- Exercise 3.5: How can you check whether a value is boolean -- without using the type function? -- check if a v...
  • ljp1919
  • ljp1919
  • 2016-01-30 10:43
  • 4314

一、Lua中的类型与值

Lua中的类型与值|果冻想 本文是对于“果冻想”的《Lua入门系列》所作笔记 基础介绍 Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都带有其自身的类型信息。在Lua中有8种基本类型,分别是: 1. nil  2. boolean 3. number  ...
  • chenbingzhao
  • chenbingzhao
  • 2016-09-01 20:58
  • 236

lua学习笔记---值,类型

值 lua语言不需要像C语言那样声明变量 (int a = 0)必须声明一个变量类型,可以直接赋值,而且值可以随用随改。lua有8种不同的变量类型 1> nil . 相当于null,当一个变量不再使用,可以将其设置为nil,告诉垃圾回收器回收。2> boolean有true和false...
  • Jarlen
  • Jarlen
  • 2015-02-13 13:46
  • 507
    个人资料
    • 访问:4140次
    • 积分:134
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类