【Lua】类型和值(三)

简介: 【Lua】类型和值(三)

一、表(Table)


当调用函数 math.sin 时,我们可能认为是“调用了 math 库中函数 sin”;而对于 Lua 语言来说,其实际含义是“以字符串"sin"为键检索表math”


Lua 语言中的表本质上是一种辅助数组(associative array),这种数组不仅可以使用数值作为索引,也可以使用字符串或其他任意类型的值作为索引(nil 除外)。


使用构造器表达式(constructor expression)创建表,其最简单的形式是{}:


> a = {}
> k = "x"
> a[k] = 10
> a[20] = "great"
> a["x"]
10
> k = 20
> a[k]
great
> a["x"] = a["x"] + 1
> a["x"]
11



表永远是匿名的,表本身和保存表的变量之间没有固定的关系:

> a = {}
> a["x"] = 10
> b = a        -- 'b' 和 'a' 引用同一张表
> b["x"] = 20
> a["x"]
20
> a = nil     -- 只有 'b' 仍然指向表
> b = nil     -- 没有指向表的引用了



  • 对于一个表而言,当程序中不再有指向它的引用时,垃圾收集器会最终删除这个表并重用其占用的内存。




二、遍历表

我们可以使用 paris迭代器遍历表中的键值对:

> t = {10, nil, 3, '4'}
> #t
4
> t[4] = nil
> #t
3
> t[3] = nil
> #t
1
> t = {10, print, x = 12, k = 'hi'}
> t
table: 0000000001178370
> for k, v in pairs(t) do
>> print(k, v)
>> end
1       10
2       function: 0000000065b9cff0
k       hi
x       12


  • 受限于表在 Lua 语言中的实现机制,遍历过程中元素的出现顺序可能是随机的,相同的程序再每次运行时也可能产生不同的顺序。唯一可以确定的是,在遍历的过程中,每个元素会且只会出现一次。

对于列表而言一使用 ipairs 迭代器:


> t = {10, print, 12, "hi"}
>
> for k, v in ipairs(t) do
>> print(k, v)
>> end
1       10
2       function: 0000000065b9cff0
3       12
4       hi


  • 此时,Lua 会确保遍历是按照顺序进行的。

另一种遍历序列的方法是使用数值型 for 循环:

> t= {10, print, 12, "hi"}
> for k = 1, #t do
>> print(k, t[k])
>> end
1       10
2       function: 0000000065b9cff0
3       12
4       hi
目录
相关文章
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
99 0
|
3月前
|
Go 开发者
|
6月前
|
Java C# 开发者
Python 中的类型注解是一种用于描述变量、函数参数和返回值预期类型的机制
【5月更文挑战第8天】Python的类型注解提升代码可读性和可维护性,虽非强制,但利于静态类型检查(如Mypy)。包括:变量注解、函数参数和返回值注解,使用内置或`typing`模块的复杂类型,自定义类型注解,以及泛型模拟。类型注解可在变量声明、函数定义和注释中使用,帮助避免类型错误,提高开发效率。
66 6
|
6月前
|
存储 Python
python返回多个值与赋值多个值
python返回多个值与赋值多个值
59 0
|
6月前
|
程序员 API PHP
深入理解PHP7的返回类型声明特性
在PHP7中,引入了返回类型声明这一强大的新特性。不同于以往仅依赖于文档和程序员约定俗成的规则,返回类型声明为函数提供了必要的强制性检查,增强了代码的健壮性和可维护性。本文将深入探讨PHP7中的返回类型声明,从基本语法入手,逐步解析其对代码质量的影响,以及在实际开发中如何高效地利用这一特性。
【Lua】类型和值(一)
【Lua】类型和值(一)
84 0
【Lua】类型和值(二)
【Lua】类型和值(二)
65 0
PHP 中,使用 (int) 或者 intval() 函数可以将变量转换为整数类型,区别是什么?底层原理是什么?
PHP 中,使用 (int) 或者 intval() 函数可以将变量转换为整数类型,区别是什么?底层原理是什么?
485 0
|
人工智能 Python
Python bool类型与逻辑关系运算
Python 表达式支持多个比较运算,这种表达式和数学中的表达方式非常接近。类型是数字类型,在参与数学计算时会分别转型为。Python 中3个布尔操作符(
163 0
Python bool类型与逻辑关系运算
|
数据采集 存储 大数据
Lua 语法数据类型与变量|学习笔记
快速学习 Lua 语法数据类型与变量