计算机软件开发扩展语言lua中值与类型的解释是什么?
发布网友
发布时间:2022-05-29 21:35
我来回答
共1个回答
热心网友
时间:2024-10-15 01:40
1.Lua 中所有的值都是 一等公民。 这意味着所有的值均可保存在变量中、 当作参数传递给其它函数、以及作为返回值。
1.1 Lua 中有八种基本类型: nil、boolean、number、string、function、userdata、 thread 和 table。Nil 是值 nil 的类型, 其主要特征就是和其它值区别开;通常用来表示一个有意义的值不存在时的状态。 Boolean 是 false 与 true 两个值的类型。 nil 和 false 都会导致条件判断为假; 而其它任何值都表示为真。 Number 代表了整数和实数(浮点数)。 String 表示一个不可变的字节序列。 Lua 对 8 位是友好的: 字符串可以容纳任意 8 位值, 其中包含零 ('\0') 。 Lua 的字符串与编码无关; 它不关心字符串中具体内容。
number 类型有两种内部表现方式, 整数 和 浮点数。 对于何时使用哪种内部形式,Lua 有明确的规则, 但它也按需作自动转换。 因此,程序员多数情况下可以选择忽略整数与浮点数之间的差异或者假设完全控制每个数字的内部表现方式。 标准 Lua 使用 64 位整数和双精度(64 位)浮点数, 但你也可以把 Lua 编译成使用 32 位整数和单精度(32 位)浮点数。 以 32 位表示数字对小型机器以及嵌入式系统特别合适。
2.Lua 可以调用(以及操作)用 Lua 或 C 编写的函数。这两种函数有统一类型 function。
userdata 类型允许将 C 中的数据保存在 Lua 变量中。 用户数据类型的值是一个内存块, 有两种用户数据: 完全用户数据 ,指一块由 Lua 管理的内存对应的对象; 轻量用户数据 ,则指一个简单的 C 指针。 用户数据在 Lua 中除了赋值与相等性判断之外没有其他预定义的操作。 通过使用 元表 ,程序员可以给完全用户数据定义一系列的操作 你只能通过 C API 而无法在 Lua 代码中创建或者修改用户数据的值, 这保证了数据仅被宿主程序所控制。
thread 类型表示了一个独立的执行序列,被用于实现协程 Lua 的线程与操作系统的线程毫无关系。 Lua 为所有的系统,包括那些不支持原生线程的系统,提供了协程支持。
3.table 是一个关联数组, 也就是说,这个数组不仅仅以数字做索引,除了 nil 和 NaN 之外的所有 Lua 值 都可以做索引。 (Not a Number 是一个特殊的数字,它用于表示未定义或表示不了的运算结果,比如 0/0。) 表可以是 异构 的; 也就是说,表内可以包含任何类型的值( nil 除外)。 任何键的值若为 nil 就不会被记入表结构内部。 换言之,对于表内不存在的键,都对应着值 nil 。
4.表是 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语言概念是什么呢?
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalim...
扩展语言lua开发过程中的数据类型有哪些呢?
1.Nil 是值 nil 的类型, 其主要特征就是和其它值区别开;通常用来表示一个有意义的值不存在时的状态。 Boolean 是 false 与 true 两个值的类型。 nil 和 false 都会导致条件判断为假; 而其它任何值都表示为真。 Number 代表了整数和实数(浮点数)。 String 表示一个不可变的字节序列。 Lua ...
计算机软件开发中扩展性语言有哪些?
程序开发中扩展语言有很多,比如lua程序设计。1.Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设施。 同时对面向对象编程、函数式编程和数据驱动式编程也提供了良好的支持。 它作为一个强大、轻量的嵌入式脚本语言,可供任何需要的程序使用。 Lua 由 clean C(标准 C ...
Lua语言:基础知识
深入理解Lua,可以从其基础数据类型开始。Lua拥有8种基本类型:nil、string、number、boolean、table、function、thread和userdata,nil代表无值,不与其他类型相等,常用于否定判断。string是可存储任意数据的序列,5.3版本引入utf8函数库进行正确处理。number类型在早期无整型,5.3版本引入整数,可通过math.t...
LUA语言入门
在Lua中,只有false和nil才被计算为false,而所有任何其它类型的值,都是true。比如0,空串等等,都是true。不要被 C语言的习惯所误导,0在Lua中的的确确是true。你也可以直接给一个变量赋以Boolean类型的值,如: varboolean = true C. Number 在Lua中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(...
lua中“#”意思是什么?
1、当键值为字符串等其他类型时,该操作符返回的值无法确认,比如 t = { x = "a", y = "b", z = "c"} t --输出是0 2、当键值为数值但不连续时,比如:t = {"a", "b", "c"} t -- 同第一个范例,此时正常为3 t[5] = "e"t --此时输出依然为3,因为t[4]为nil,...
通过userdata扩展lua
Userdata是lua中用于表示c语言结构体的一种方式,它存储在lua内部的原始内存区域,由lua创建和管理。这个内存区域是固定的,不能动态扩展,但其中的指向数据可以动态增加。通过userdata,我们可以将lua值(uservalue)绑定到函数或结构上,形成闭包。在lua5.3中,一对一绑定,而在5.4版本中支持多对一的...
Lua 中怎么变换数据类型?
LUA:local num=3.14;printf(totring num)。当Lua通过call或 pcall函数执行Redis命令的时候,命令的返回值会被转换成Lua数据结构。 同样地,当Lua脚本在Redis内置的解释器里运行时,Lua 脚本的返回值也会被转换成Redis协议(protocol),然后由EVAL将值返回给客户端。数据类型之间转换遵循这样一个设计原则...
Lua 是怎样一门语言?
Lua是一个动态类型语言,支持增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程支持。Lua原生支持的数据类型很少,只提供了数值(默认是双精度浮点数,可配置)、布尔量、字符串、表格、函数、线程以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高,加上元表的支持,开发者可以...
软件开发里面的变量是什么,有什么用呢?
变量就是储存值的一个空间,这个值不同语言中的类型就大同小异了,很多,我以la语言为例:变量是储存值的地方。 Lu a 中有三种变量: 全局变量、局部变量和表的域。单个名字可以指代一个全局变量也可以指代一个局部变量 (或者是一个函数的形参,这是一种特殊形式的局部变量)。var ::= Name 名字...